home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1994 November / macformat-018.iso / Utility Spectacular / Developer / f2c_5_92 Folder / f2c_5_92 / f2c / gram.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-05-26  |  78.6 KB  |  2,510 lines  |  [TEXT/ttxt]

  1. #ifndef THINK_C
  2. extern char *malloc(), *realloc();
  3. #endif
  4. # define SEOS 1
  5. # define SCOMMENT 2
  6. # define SLABEL 3
  7. # define SUNKNOWN 4
  8. # define SHOLLERITH 5
  9. # define SICON 6
  10. # define SRCON 7
  11. # define SDCON 8
  12. # define SBITCON 9
  13. # define SOCTCON 10
  14. # define SHEXCON 11
  15. # define STRUE 12
  16. # define SFALSE 13
  17. # define SNAME 14
  18. # define SNAMEEQ 15
  19. # define SFIELD 16
  20. # define SSCALE 17
  21. # define SINCLUDE 18
  22. # define SLET 19
  23. # define SASSIGN 20
  24. # define SAUTOMATIC 21
  25. # define SBACKSPACE 22
  26. # define SBLOCK 23
  27. # define SCALL 24
  28. # define SCHARACTER 25
  29. # define SCLOSE 26
  30. # define SCOMMON 27
  31. # define SCOMPLEX 28
  32. # define SCONTINUE 29
  33. # define SDATA 30
  34. # define SDCOMPLEX 31
  35. # define SDIMENSION 32
  36. # define SDO 33
  37. # define SDOUBLE 34
  38. # define SELSE 35
  39. # define SELSEIF 36
  40. # define SEND 37
  41. # define SENDFILE 38
  42. # define SENDIF 39
  43. # define SENTRY 40
  44. # define SEQUIV 41
  45. # define SEXTERNAL 42
  46. # define SFORMAT 43
  47. # define SFUNCTION 44
  48. # define SGOTO 45
  49. # define SASGOTO 46
  50. # define SCOMPGOTO 47
  51. # define SARITHIF 48
  52. # define SLOGIF 49
  53. # define SIMPLICIT 50
  54. # define SINQUIRE 51
  55. # define SINTEGER 52
  56. # define SINTRINSIC 53
  57. # define SLOGICAL 54
  58. # define SNAMELIST 55
  59. # define SOPEN 56
  60. # define SPARAM 57
  61. # define SPAUSE 58
  62. # define SPRINT 59
  63. # define SPROGRAM 60
  64. # define SPUNCH 61
  65. # define SREAD 62
  66. # define SREAL 63
  67. # define SRETURN 64
  68. # define SREWIND 65
  69. # define SSAVE 66
  70. # define SSTATIC 67
  71. # define SSTOP 68
  72. # define SSUBROUTINE 69
  73. # define STHEN 70
  74. # define STO 71
  75. # define SUNDEFINED 72
  76. # define SWRITE 73
  77. # define SLPAR 74
  78. # define SRPAR 75
  79. # define SEQUALS 76
  80. # define SCOLON 77
  81. # define SCOMMA 78
  82. # define SCURRENCY 79
  83. # define SPLUS 80
  84. # define SMINUS 81
  85. # define SSTAR 82
  86. # define SSLASH 83
  87. # define SPOWER 84
  88. # define SCONCAT 85
  89. # define SAND 86
  90. # define SOR 87
  91. # define SNEQV 88
  92. # define SEQV 89
  93. # define SNOT 90
  94. # define SEQ 91
  95. # define SLT 92
  96. # define SGT 93
  97. # define SLE 94
  98. # define SGE 95
  99. # define SNE 96
  100. # define SENDDO 97
  101. # define SWHILE 98
  102. # define SSLASHD 99
  103.  
  104. /* # line 124 "gram.in" */
  105. #    include "defs.h"
  106. #    include "p1defs.h"
  107.  
  108. static int nstars;            /* Number of labels in an
  109.                        alternate return CALL */
  110. static int datagripe;
  111. static int ndim;
  112. static int vartype;
  113. int new_dcl;
  114. static ftnint varleng;
  115. static struct Dims dims[MAXDIM+1];
  116. static struct Labelblock *labarray[MAXLABLIST];    /* Labels in an alternate
  117.                            return CALL */
  118.  
  119. /* The next two variables are used to verify that each statement might be reached
  120.    during runtime.   lastwasbranch   is tested only in the defintion of the
  121.    stat:   nonterminal. */
  122.  
  123. int lastwasbranch = NO;
  124. static int thiswasbranch = NO;
  125. extern ftnint yystno;
  126. extern flag intonly;
  127. static chainp datastack;
  128. extern long laststfcn, thisstno;
  129. extern int can_include;    /* for netlib */
  130.  
  131. ftnint convci();
  132. Addrp nextdata();
  133. expptr mklogcon(), mkaddcon(), mkrealcon(), mkstrcon(), mkbitcon();
  134. expptr mkcxcon();
  135. struct Listblock *mklist();
  136. struct Listblock *mklist();
  137. struct Impldoblock *mkiodo();
  138. Extsym *comblock();
  139. #define ESNULL (Extsym *)0
  140. #define NPNULL (Namep)0
  141. #define LBNULL (struct Listblock *)0
  142. extern void freetemps(), make_param();
  143.  
  144.  static void
  145. pop_datastack() {
  146.     chainp d0 = datastack;
  147.     if (d0->datap)
  148.         curdtp = (chainp)d0->datap;
  149.     datastack = d0->nextp;
  150.     d0->nextp = 0;
  151.     frchain(&d0);
  152.     }
  153.  
  154.  
  155. /* # line 177 "gram.in" */
  156. typedef union     {
  157.     int ival;
  158.     ftnint lval;
  159.     char *charpval;
  160.     chainp chval;
  161.     tagptr tagval;
  162.     expptr expval;
  163.     struct Labelblock *labval;
  164.     struct Nameblock *namval;
  165.     struct Eqvchain *eqvval;
  166.     Extsym *extval;
  167.     } YYSTYPE;
  168. #define yyclearin yychar = -1
  169. #define yyerrok yyerrflag = 0
  170. extern int yychar;
  171. extern int yyerrflag;
  172. #ifndef YYMAXDEPTH
  173. #define YYMAXDEPTH 150
  174. #endif
  175. YYSTYPE yylval, yyval;
  176. # define YYERRCODE 256
  177. int yyexca[] ={
  178. -1, 1,
  179.     0, -1,
  180.     -2, 0,
  181. -1, 20,
  182.     1, 38,
  183.     -2, 228,
  184. -1, 24,
  185.     1, 42,
  186.     -2, 228,
  187. -1, 122,
  188.     6, 240,
  189.     -2, 228,
  190. -1, 150,
  191.     1, 244,
  192.     -2, 188,
  193. -1, 174,
  194.     1, 265,
  195.     78, 265,
  196.     -2, 188,
  197. -1, 223,
  198.     77, 173,
  199.     -2, 139,
  200. -1, 245,
  201.     74, 228,
  202.     -2, 225,
  203. -1, 271,
  204.     1, 286,
  205.     -2, 143,
  206. -1, 275,
  207.     1, 295,
  208.     78, 295,
  209.     -2, 145,
  210. -1, 328,
  211.     77, 174,
  212.     -2, 141,
  213. -1, 358,
  214.     1, 267,
  215.     14, 267,
  216.     74, 267,
  217.     78, 267,
  218.     -2, 189,
  219. -1, 436,
  220.     91, 0,
  221.     92, 0,
  222.     93, 0,
  223.     94, 0,
  224.     95, 0,
  225.     96, 0,
  226.     -2, 153,
  227. -1, 453,
  228.     1, 289,
  229.     78, 289,
  230.     -2, 143,
  231. -1, 455,
  232.     1, 291,
  233.     78, 291,
  234.     -2, 143,
  235. -1, 457,
  236.     1, 293,
  237.     78, 293,
  238.     -2, 143,
  239. -1, 459,
  240.     1, 296,
  241.     78, 296,
  242.     -2, 144,
  243. -1, 504,
  244.     78, 289,
  245.     -2, 143,
  246.     };
  247. # define YYNPROD 301
  248. # define YYLAST 1346
  249. int yyact[]={
  250.  
  251.    237,   274,   471,   317,   316,   412,   420,   297,   470,   399,
  252.    413,   397,   386,   357,   398,   266,   128,   356,   273,   252,
  253.    292,     5,   116,   295,   326,   303,   222,    99,   184,   121,
  254.    195,   229,    17,   203,   270,   304,   313,   199,   201,   118,
  255.     94,   202,   396,   104,   210,   183,   236,   101,   106,   234,
  256.    264,   103,   111,   336,   260,    95,    96,    97,   165,   166,
  257.    334,   335,   336,   395,   105,   311,   309,   190,   130,   131,
  258.    132,   133,   120,   135,   119,   114,   157,   129,   157,   475,
  259.    103,   272,   334,   335,   336,   396,   521,   103,   278,   483,
  260.    535,   165,   166,   334,   335,   336,   342,   341,   340,   339,
  261.    338,   137,   343,   345,   344,   347,   346,   348,   450,   258,
  262.    259,   260,   539,   165,   166,   258,   259,   260,   261,   525,
  263.    102,   522,   155,   409,   155,   186,   187,   103,   408,   117,
  264.    165,   166,   258,   259,   260,   318,   100,   527,   484,   188,
  265.    446,   185,   480,   230,   240,   240,   194,   193,   290,   120,
  266.    211,   119,   462,   481,   157,   294,   482,   257,   157,   243,
  267.    468,   214,   463,   469,   461,   464,   460,   239,   241,   220,
  268.    215,   218,   157,   219,   213,   165,   166,   334,   335,   336,
  269.    342,   341,   340,   157,   371,   452,   343,   345,   344,   347,
  270.    346,   348,   443,   428,   377,   294,   102,   102,   102,   102,
  271.    155,   189,   447,   149,   155,   446,   192,   103,    98,   196,
  272.    197,   198,   277,   376,   320,   321,   206,   288,   155,   289,
  273.    300,   375,   299,   324,   315,   328,   275,   275,   330,   155,
  274.    310,   333,   196,   216,   217,   350,   269,   207,   308,   352,
  275.    353,   333,   100,   177,   354,   349,   323,   112,   245,   257,
  276.    247,   110,   157,   417,   286,   287,   418,   362,   157,   157,
  277.    157,   157,   157,   257,   257,   109,   108,   268,   279,   280,
  278.    281,   265,   107,   355,     4,   333,   427,   465,   378,   370,
  279.    170,   172,   176,   257,   165,   166,   258,   259,   260,   261,
  280.    102,   406,   232,   293,   407,   381,   422,   390,   155,   400,
  281.    391,   223,   419,   422,   155,   155,   155,   155,   155,   117,
  282.    221,   314,   392,   319,   387,   359,   372,   196,   360,   373,
  283.    374,   333,   333,   536,   350,   333,   275,   250,   424,   333,
  284.    405,   333,   410,   532,   230,   432,   433,   434,   435,   436,
  285.    437,   438,   439,   440,   441,   403,   331,   156,   401,   332,
  286.    531,   333,   530,   333,   333,   333,   388,   526,   380,   529,
  287.    524,   157,   257,   333,   431,   492,   257,   257,   257,   257,
  288.    257,   382,   383,   235,   426,   384,   358,   494,   296,   333,
  289.    448,   165,   166,   258,   259,   260,   261,   451,   165,   166,
  290.    258,   259,   260,   261,   103,   445,   472,   400,   421,   191,
  291.    402,   196,   103,   150,   307,   174,   285,   155,   474,   246,
  292.    476,   416,   467,   466,   242,   226,   223,   200,   212,   136,
  293.    209,   486,   171,   488,   490,   275,   275,   275,   141,   240,
  294.    496,   429,   329,   333,   333,   333,   333,   333,   333,   333,
  295.    333,   333,   333,   403,   497,   479,   401,   403,   487,   154,
  296.    257,   154,   495,   493,   306,   485,   502,   454,   456,   458,
  297.    500,   491,   268,   499,   505,   506,   507,   103,   451,   271,
  298.    271,   472,    30,   333,   414,   501,   400,   508,   511,   509,
  299.    387,   244,   208,   510,   516,   514,   515,   333,   517,   333,
  300.    513,   333,   520,   293,   518,   225,   240,   333,   402,   523,
  301.     92,   248,   402,   528,     6,   262,   123,   249,    81,    80,
  302.    275,   275,   275,    79,   534,   533,   479,    78,   173,   263,
  303.    314,    77,   403,    76,   537,   401,   351,   154,    75,   333,
  304.    282,   154,    60,    49,    48,   333,    45,    33,   333,   538,
  305.    113,   205,   454,   456,   458,   154,   267,   165,   166,   334,
  306.    335,   336,   342,   540,   503,   411,   154,   204,   394,   393,
  307.    298,   478,   503,   503,   503,   134,   389,   312,   115,   379,
  308.     26,    25,    24,    23,   302,    22,   305,   402,    21,   385,
  309.    284,     9,   503,     8,     7,     2,   519,   301,    20,   319,
  310.    164,    51,   489,   291,   228,   327,   325,   415,    91,   361,
  311.    255,    53,   337,    19,    55,   365,   366,   367,   368,   369,
  312.     37,   224,     3,     1,     0,   351,     0,     0,     0,     0,
  313.      0,     0,     0,     0,     0,   154,     0,     0,     0,     0,
  314.      0,   154,   154,   154,   154,   154,     0,     0,     0,   267,
  315.      0,   512,   267,   267,   165,   166,   334,   335,   336,   342,
  316.    341,   340,   339,   338,     0,   343,   345,   344,   347,   346,
  317.    348,   165,   166,   334,   335,   336,   342,   341,   453,   455,
  318.    457,     0,   343,   345,   344,   347,   346,   348,     0,     0,
  319.    305,     0,   459,     0,     0,     0,     0,   165,   166,   334,
  320.    335,   336,   342,   341,   340,   339,   338,   351,   343,   345,
  321.    344,   347,   346,   348,   444,     0,     0,     0,   449,   165,
  322.    166,   334,   335,   336,   342,   341,   340,   339,   338,     0,
  323.    343,   345,   344,   347,   346,   348,   165,   166,   334,   335,
  324.    336,   342,     0,     0,   154,     0,   498,   343,   345,   344,
  325.    347,   346,   348,     0,     0,   267,     0,     0,     0,     0,
  326.      0,   442,     0,   504,   455,   457,   165,   166,   334,   335,
  327.    336,   342,   341,   340,   339,   338,     0,   343,   345,   344,
  328.    347,   346,   348,     0,     0,     0,     0,     0,     0,   430,
  329.      0,   477,     0,   305,   165,   166,   334,   335,   336,   342,
  330.    341,   340,   339,   338,     0,   343,   345,   344,   347,   346,
  331.    348,   423,     0,     0,     0,     0,   165,   166,   334,   335,
  332.    336,   342,   341,   340,   339,   338,     0,   343,   345,   344,
  333.    347,   346,   348,     0,     0,     0,   267,     0,     0,     0,
  334.      0,   165,   166,   334,   335,   336,   342,   341,   340,   339,
  335.    338,    12,   343,   345,   344,   347,   346,   348,     0,     0,
  336.      0,     0,     0,     0,   305,    10,    56,    46,    73,    85,
  337.     14,    61,    70,    90,    38,    66,    47,    42,    68,    72,
  338.     31,    67,    35,    34,    11,    87,    36,    18,    41,    39,
  339.     28,    16,    57,    58,    59,    50,    54,    43,    88,    64,
  340.     40,    69,    44,    89,    29,    62,    84,    13,     0,    82,
  341.     65,    52,    86,    27,    74,    63,    15,     0,     0,    71,
  342.     83,   160,   161,   162,   163,   169,   168,   167,   158,   159,
  343.    103,     0,   160,   161,   162,   163,   169,   168,   167,   158,
  344.    159,   103,     0,     0,    32,   160,   161,   162,   163,   169,
  345.    168,   167,   158,   159,   103,     0,   160,   161,   162,   163,
  346.    169,   168,   167,   158,   159,   103,     0,   160,   161,   162,
  347.    163,   169,   168,   167,   158,   159,   103,     0,   160,   161,
  348.    162,   163,   169,   168,   167,   158,   159,   103,     0,     0,
  349.    233,     0,     0,     0,     0,     0,   165,   166,   363,     0,
  350.    364,   233,   227,     0,     0,     0,   238,   165,   166,   231,
  351.      0,     0,     0,     0,   233,     0,     0,   238,     0,     0,
  352.    165,   166,   473,     0,     0,   233,     0,     0,     0,     0,
  353.    238,   165,   166,   231,     0,     0,   233,     0,     0,     0,
  354.      0,   238,   165,   166,   425,     0,     0,   233,     0,     0,
  355.      0,     0,   238,   165,   166,     0,     0,     0,     0,     0,
  356.      0,     0,     0,   238,   160,   161,   162,   163,   169,   168,
  357.    167,   158,   159,   103,     0,   160,   161,   162,   163,   169,
  358.    168,   167,   158,   159,   103,   160,   161,   162,   163,   169,
  359.    168,   167,   158,   159,   103,     0,     0,     0,   160,   161,
  360.    162,   163,   169,   168,   167,   158,   159,   103,   256,     0,
  361.     93,   160,   161,   162,   163,   169,   168,   167,   158,   159,
  362.    103,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  363.      0,     0,     0,   276,     0,     0,     0,     0,     0,   165,
  364.    166,     0,   122,     0,   322,   125,   126,   127,     0,   238,
  365.    165,   166,     0,     0,     0,     0,     0,   138,   139,     0,
  366.    238,   140,     0,   142,   143,   144,     0,   251,   145,   146,
  367.    147,     0,   148,   165,   166,   253,     0,   254,     0,     0,
  368.    153,     0,     0,     0,     0,     0,   165,   166,   151,     0,
  369.    152,   178,   179,   180,   181,   182,   160,   161,   162,   163,
  370.    169,   168,   167,   158,   159,   103,   160,   161,   162,   163,
  371.    169,   168,   167,   158,   159,   103,   160,   161,   162,   163,
  372.    169,   168,   167,   158,   159,   103,   160,   161,   162,   163,
  373.    169,   168,   167,   158,   159,   103,     0,     0,     0,     0,
  374.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  375.      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
  376.      0,     0,     0,     0,     0,   251,     0,     0,     0,     0,
  377.      0,   165,   166,   283,     0,   153,     0,     0,     0,     0,
  378.      0,   165,   166,   175,     0,   404,     0,     0,     0,     0,
  379.      0,   165,   166,    56,    46,   251,    85,     0,    61,     0,
  380.     90,   165,   166,    47,    73,     0,     0,     0,    70,     0,
  381.      0,    66,    87,     0,    68,    72,     0,    67,     0,    57,
  382.     58,    59,    50,     0,     0,    88,     0,     0,     0,     0,
  383.     89,     0,    62,    84,     0,    64,    82,    69,    52,    86,
  384.      0,     0,    63,     0,   124,     0,    65,    83,     0,     0,
  385.     74,     0,     0,     0,     0,    71 };
  386. int yypact[]={
  387.  
  388.  -1000,    18,   503,   837, -1000, -1000, -1000, -1000, -1000, -1000,
  389.    495, -1000, -1000, -1000, -1000, -1000, -1000,   164,   453,   -35,
  390.    194,   188,   187,   173,    58,   169,    -8,    66, -1000, -1000,
  391.  -1000, -1000, -1000,  1264, -1000, -1000, -1000,    -5, -1000, -1000,
  392.  -1000, -1000, -1000, -1000, -1000,   453, -1000, -1000, -1000, -1000,
  393.  -1000,   354, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  394.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  395.  -1000, -1000, -1000, -1000, -1000,  1096,   348,  1191,   348,   165,
  396.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  397.  -1000, -1000, -1000, -1000,   453,   453,   453,   453, -1000,   453,
  398.  -1000,   325, -1000, -1000,   453, -1000,   -11,   453,   453,   453,
  399.    343, -1000, -1000, -1000,   453,   159, -1000, -1000, -1000, -1000,
  400.    468,   346,    58, -1000, -1000,   344, -1000, -1000, -1000, -1000,
  401.     66,   453,   453,   343, -1000, -1000,   234,   342,   489, -1000,
  402.    341,   917,   963,   963,   340,   475,   453,   335,   453, -1000,
  403.  -1000, -1000, -1000,  1083, -1000, -1000,   308,  1211, -1000, -1000,
  404.  -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  405.  -1000,  1083,   193,   158, -1000, -1000,  1049,  1049, -1000, -1000,
  406.  -1000, -1000,  1181,   332, -1000, -1000,   325,   325,   453, -1000,
  407.  -1000,    73,   304, -1000,    58, -1000,   304, -1000, -1000, -1000,
  408.    453, -1000,   380, -1000,   330,  1273,   -17,    66,   -18,   453,
  409.    475,    37,   963,  1060, -1000,   453, -1000, -1000, -1000, -1000,
  410.  -1000,   963, -1000,   963,   361, -1000,   963, -1000,   271, -1000,
  411.    751,   475, -1000,   963, -1000, -1000, -1000,   963,   963, -1000,
  412.    751, -1000,   963, -1000, -1000,    58,   475, -1000,   301,   240,
  413.  -1000,  1211, -1000, -1000, -1000,   906, -1000,  1211,  1211,  1211,
  414.   1211,  1211,   -30,   204,   106,   388, -1000, -1000,   388,   388,
  415.  -1000,   143,   135,   116,   751, -1000,  1049, -1000, -1000, -1000,
  416.  -1000, -1000,   308, -1000, -1000,   300, -1000, -1000,   325, -1000,
  417.  -1000,   222, -1000, -1000, -1000,    -5, -1000,   -36,  1201,   453,
  418.  -1000,   216, -1000,    45, -1000, -1000,   380,   460, -1000,   453,
  419.  -1000, -1000,   178, -1000,   226, -1000, -1000, -1000,   324,   220,
  420.    726,   751,   952, -1000,   751,   299,   199,   115,   751,   453,
  421.    704, -1000,   941,   963,   963,   963,   963,   963,   963,   963,
  422.    963,   963,   963, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  423.    676,   114,   -31,   646,   629,   321,   127, -1000, -1000, -1000,
  424.   1083,    33,   751, -1000, -1000,    27,   -30,   -30,   -30,    50,
  425.  -1000,   388,   106,   107,   106,  1049,  1049,  1049,   607,    88,
  426.     86,    74, -1000, -1000, -1000,    87, -1000,   201, -1000,   304,
  427.  -1000,   113, -1000,    85,   930, -1000,  1201, -1000, -1000,    -3,
  428.   1070, -1000, -1000, -1000,   963, -1000, -1000,   453, -1000,   380,
  429.     64,    78, -1000,     8, -1000,    60, -1000, -1000,   453,   963,
  430.     58,   963,   963,   391, -1000,   290,   303,   963,   963, -1000,
  431.    475, -1000,     0,   -31,   -31,   -31,   467,    95,    95,   581,
  432.    646,   -22, -1000,   963, -1000,   475,   475,    58, -1000,   308,
  433.  -1000, -1000,   388, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
  434.   1049,  1049,  1049, -1000,   466,   465,    -5, -1000, -1000,   930,
  435.  -1000, -1000,   564, -1000, -1000,  1201, -1000, -1000, -1000, -1000,
  436.    380, -1000,   460,   460,   453, -1000,   751,    37,    11,    43,
  437.    751, -1000, -1000, -1000,   963,   285,   751,    41,   282,    62,
  438.  -1000,   963,   284,   227,   282,   277,   275,   258, -1000, -1000,
  439.  -1000, -1000,   930, -1000, -1000,     7,   248, -1000, -1000, -1000,
  440.  -1000, -1000,   963, -1000, -1000,   475, -1000, -1000,   751, -1000,
  441.  -1000, -1000, -1000, -1000,   751, -1000, -1000,   751,    34,   475,
  442.  -1000 };
  443. int yypgo[]={
  444.  
  445.      0,   613,   612,    13,   611,    81,    15,    32,   610,   604,
  446.    603,    10,     0,   602,   601,   600,    16,   598,    35,    25,
  447.    597,   596,   595,     3,     4,   594,    67,   593,   592,    50,
  448.     34,    18,    26,   101,    20,   591,    30,   373,     1,   292,
  449.     24,   347,   327,     2,     9,    14,    31,    49,    46,   590,
  450.    588,    39,    28,    45,   587,   585,   584,   583,   581,  1100,
  451.     40,   580,   579,    12,   578,   575,   573,   572,   571,   570,
  452.    568,    29,   567,    27,   566,    23,    41,     7,    44,     6,
  453.     37,   565,    38,   561,   560,    11,    22,    36,   559,   558,
  454.      8,    17,    33,   557,   555,   541,     5,   540,   472,   537,
  455.    536,   534,   533,   532,   528,   203,   523,   521,   518,   517,
  456.    513,   509,    88,   508,   507,    19 };
  457. int yyr1[]={
  458.  
  459.      0,     1,     1,    55,    55,    55,    55,    55,    55,    55,
  460.      2,    56,    56,    56,    56,    56,    56,    56,    60,    52,
  461.     33,    53,    53,    61,    61,    62,    62,    63,    63,    26,
  462.     26,    26,    27,    27,    34,    34,    17,    57,    57,    57,
  463.     57,    57,    57,    57,    57,    57,    57,    57,    57,    10,
  464.     10,    10,    74,     7,     8,     9,     9,     9,     9,     9,
  465.      9,     9,     9,     9,     9,     9,    16,    16,    16,    50,
  466.     50,    50,    50,    51,    51,    64,    64,    65,    65,    66,
  467.     66,    80,    54,    54,    67,    67,    81,    82,    76,    83,
  468.     84,    77,    77,    85,    85,    45,    45,    45,    70,    70,
  469.     86,    86,    72,    72,    87,    36,    18,    18,    19,    19,
  470.     75,    75,    89,    88,    88,    90,    90,    43,    43,    91,
  471.     91,     3,    68,    68,    92,    92,    95,    93,    94,    94,
  472.     96,    96,    11,    69,    69,    97,    20,    20,    71,    21,
  473.     21,    22,    22,    38,    38,    38,    39,    39,    39,    39,
  474.     39,    39,    39,    39,    39,    39,    39,    39,    39,    39,
  475.     12,    12,    13,    13,    13,    13,    13,    13,    37,    37,
  476.     37,    37,    32,    40,    40,    44,    44,    48,    48,    48,
  477.     48,    48,    48,    48,    47,    49,    49,    49,    41,    41,
  478.     42,    42,    42,    42,    42,    42,    42,    42,    58,    58,
  479.     58,    58,    58,    58,    58,    58,    58,    99,    23,    24,
  480.     24,    98,    98,    98,    98,    98,    98,    98,    98,    98,
  481.     98,    98,     4,   100,   101,   101,   101,   101,    73,    73,
  482.     35,    25,    25,    46,    46,    14,    14,    28,    28,    59,
  483.     78,    79,   102,   103,   103,   103,   103,   103,   103,   103,
  484.    103,   103,   103,   103,   103,   103,   103,   104,   111,   111,
  485.    111,   106,   113,   113,   113,   108,   108,   105,   105,   114,
  486.    114,   115,   115,   115,   115,   115,   115,    15,   107,   109,
  487.    110,   110,    29,    29,     6,     6,    30,    30,    30,    31,
  488.     31,    31,    31,    31,    31,     5,     5,     5,     5,     5,
  489.    112 };
  490. int yyr2[]={
  491.  
  492.      0,     0,     6,     5,     4,     5,     7,     7,     5,     3,
  493.      3,     7,     9,     7,     9,     9,    11,     7,     1,     3,
  494.      3,     1,     2,     4,     6,     2,     6,     2,     6,     1,
  495.      5,     7,     3,     7,     3,     3,     3,     2,     2,     2,
  496.      2,     2,     2,     2,     2,     3,     5,     3,    11,    15,
  497.     11,    11,     1,     5,     3,     3,     3,     3,     3,     3,
  498.      3,     3,     3,     3,     3,     3,     1,     9,    13,     7,
  499.      9,    11,     7,     3,     7,     7,     7,     7,     7,     6,
  500.      6,     7,     3,     7,     6,     6,     1,    13,     1,     1,
  501.      1,     4,     6,     3,     7,     2,     5,     2,     2,     6,
  502.      3,     2,     2,     6,     7,     5,     3,    11,     3,     7,
  503.      1,     6,     1,     4,     6,     3,     7,     3,     2,     3,
  504.      7,     3,     7,     6,     8,     3,     1,     4,     2,     6,
  505.      3,     7,     3,     2,     4,     9,     3,     7,     1,     1,
  506.      3,     3,     7,     2,     7,     2,     2,     2,     7,     7,
  507.      7,     7,     5,     7,     7,     7,     7,     7,     5,     7,
  508.      3,     3,     3,     3,     3,     3,     3,     3,     3,     5,
  509.      9,    11,    11,     1,     2,     3,     2,     3,     3,     3,
  510.      3,     3,     3,     2,    11,     3,     3,     3,     2,     7,
  511.      2,     2,     7,     7,     7,     7,     5,     7,     2,    15,
  512.      9,     3,     5,     4,    13,     5,     5,    11,     7,     2,
  513.      9,     9,    11,     4,     2,     3,    21,     3,     7,     9,
  514.      7,     7,     3,     3,     7,     7,    15,    15,     0,     2,
  515.      7,     3,     7,     2,     5,     3,     3,     3,     7,     1,
  516.      1,     1,     3,     4,     5,     5,     5,     4,     5,     5,
  517.      7,     9,     9,     5,     7,     3,     7,     6,     3,     3,
  518.      3,     6,     3,     3,     3,     3,     3,     7,     7,     2,
  519.      6,     3,     3,     3,     5,     5,     5,     3,     7,     7,
  520.      9,     9,     3,     7,     3,    11,     3,     3,     2,     7,
  521.      7,     7,     7,     7,     7,     3,     7,    11,    11,    11,
  522.      1 };
  523. int yychk[]={
  524.  
  525.  -1000,    -1,   -55,    -2,   256,     3,     1,   -56,   -57,   -58,
  526.     18,    37,     4,    60,    23,    69,    44,    -7,    40,   -10,
  527.    -50,   -64,   -65,   -66,   -67,   -68,   -69,    66,    43,    57,
  528.    -98,    33,    97,   -99,    36,    35,    39,    -8,    27,    42,
  529.     53,    41,    30,    50,    55,  -100,    20,    29,  -101,  -102,
  530.     48,   -35,    64,   -14,    49,    -9,    19,    45,    46,    47,
  531.   -103,    24,    58,    68,    52,    63,    28,    34,    31,    54,
  532.     25,    72,    32,    21,    67,  -104,  -106,  -107,  -109,  -110,
  533.   -111,  -113,    62,    73,    59,    22,    65,    38,    51,    56,
  534.     26,   -17,     5,   -59,   -60,   -60,   -60,   -60,    44,   -73,
  535.     78,   -52,   -33,    14,    78,    99,   -73,    78,    78,    78,
  536.     78,   -73,    78,   -97,    83,   -70,   -86,   -33,   -51,    85,
  537.     83,   -71,   -59,   -98,    70,   -59,   -59,   -59,   -16,    82,
  538.    -71,   -71,   -71,   -71,   -81,   -71,   -37,   -33,   -59,   -59,
  539.    -59,    74,   -59,   -59,   -59,   -59,   -59,   -59,   -59,  -105,
  540.    -42,    82,    84,    74,   -37,   -48,   -41,   -12,    12,    13,
  541.      5,     6,     7,     8,   -49,    80,    81,    11,    10,     9,
  542.   -105,    74,  -105,  -108,   -42,    82,  -105,    78,   -59,   -59,
  543.    -59,   -59,   -59,   -53,   -52,   -53,   -52,   -52,   -60,   -33,
  544.    -26,    74,   -33,   -76,   -51,   -36,   -33,   -33,   -33,   -80,
  545.     74,   -82,   -76,   -92,   -93,   -95,   -33,    78,    14,    74,
  546.    -78,   -73,    74,   -78,   -36,   -51,   -33,   -33,   -80,   -82,
  547.    -92,    76,   -32,    74,    -4,     6,    74,    75,   -25,   -46,
  548.    -38,    82,   -39,    74,   -47,   -37,   -48,   -12,    90,   -40,
  549.    -38,   -40,    74,    -3,     6,   -33,    74,   -33,   -41,  -114,
  550.    -42,    74,  -115,    82,    84,   -15,    15,   -12,    82,    83,
  551.     84,    85,   -41,   -41,   -29,    78,    -6,   -37,    74,    78,
  552.    -30,   -39,    -5,   -31,   -38,   -47,    74,   -30,  -112,  -112,
  553.   -112,  -112,   -41,    82,   -61,    74,   -26,   -26,   -52,   -71,
  554.     75,   -27,   -34,   -33,    82,   -75,    74,   -77,   -84,   -73,
  555.    -75,   -54,   -37,   -19,   -18,   -37,    74,    74,    -7,    83,
  556.    -86,    83,   -72,   -87,   -33,    -3,   -24,   -23,    98,   -33,
  557.    -38,   -38,    74,   -36,   -38,   -21,   -40,   -22,   -38,    71,
  558.    -38,    75,    78,   -12,    82,    83,    84,   -13,    89,    88,
  559.     87,    86,    85,    91,    93,    92,    95,    94,    96,    -3,
  560.    -38,   -39,   -38,   -38,   -38,   -73,   -91,    -3,    75,    75,
  561.     78,   -41,   -38,    82,    84,   -41,   -41,   -41,   -41,   -41,
  562.     75,    78,   -29,   -29,   -29,    78,    78,    78,   -38,   -39,
  563.     -5,   -31,  -112,  -112,    75,   -62,   -63,    14,   -26,   -74,
  564.     75,    78,   -16,   -88,   -89,    99,    78,   -85,   -45,   -44,
  565.    -12,   -47,   -33,   -48,    74,   -36,    75,    78,    83,    78,
  566.    -19,   -94,   -96,   -11,    14,   -20,   -33,    75,    78,    76,
  567.    -79,    74,    76,    75,   -79,    82,    75,    77,    78,   -33,
  568.     75,   -46,   -38,   -38,   -38,   -38,   -38,   -38,   -38,   -38,
  569.    -38,   -38,    75,    78,    75,    74,    78,    75,  -115,   -41,
  570.     75,    -6,    78,   -39,    -5,   -39,    -5,   -39,    -5,    75,
  571.     78,    78,    78,    75,    78,    76,   -75,   -34,    75,    78,
  572.    -90,   -43,   -38,    82,   -85,    82,   -44,   -37,   -83,   -18,
  573.     78,    75,    78,    81,    78,   -87,   -38,   -73,   -38,   -28,
  574.    -38,    70,    75,   -32,    74,   -40,   -38,    -3,   -39,   -91,
  575.     -3,   -73,   -23,   -33,   -39,   -23,   -23,   -23,   -63,    14,
  576.    -16,   -90,    77,   -45,   -44,   -77,   -23,   -96,   -11,   -33,
  577.    -24,    75,    78,   -79,    75,    78,    75,    75,   -38,    75,
  578.     75,    75,    75,   -43,   -38,    83,    75,   -38,    -3,    78,
  579.     -3 };
  580. int yydef[]={
  581.  
  582.      1,    -2,     0,     0,     9,    10,     2,     3,     4,     5,
  583.      0,   239,     8,    18,    18,    18,    18,   228,     0,    37,
  584.     -2,    39,    40,    41,    -2,    43,    44,    45,    47,   138,
  585.    198,   239,   201,     0,   239,   239,   239,    66,   138,   138,
  586.    138,   138,    86,   138,   133,     0,   239,   239,   214,   215,
  587.    239,   217,   239,   239,   239,    54,   223,   239,   239,   239,
  588.    242,   239,   235,   236,    55,    56,    57,    58,    59,    60,
  589.     61,    62,    63,    64,    65,     0,     0,     0,     0,   255,
  590.    239,   239,   239,   239,   239,   258,   259,   260,   262,   263,
  591.    264,     6,    36,     7,    21,    21,     0,     0,    18,     0,
  592.    229,    29,    19,    20,     0,    88,     0,   229,     0,     0,
  593.      0,    88,   126,   134,     0,    46,    98,   100,   101,    73,
  594.      0,     0,    -2,   202,   203,     0,   205,   206,    53,   240,
  595.      0,     0,     0,     0,    88,   126,     0,   168,     0,   213,
  596.      0,     0,   173,   173,     0,     0,     0,     0,     0,   243,
  597.     -2,   245,   246,     0,   190,   191,     0,     0,   177,   178,
  598.    179,   180,   181,   182,   183,   160,   161,   185,   186,   187,
  599.    247,     0,   248,   249,    -2,   266,   253,     0,   300,   300,
  600.    300,   300,     0,    11,    22,    13,    29,    29,     0,   138,
  601.     17,     0,   110,    90,   228,    72,   110,    76,    78,    80,
  602.      0,    85,     0,   123,   125,     0,     0,     0,     0,     0,
  603.      0,     0,     0,     0,    69,     0,    75,    77,    79,    84,
  604.    122,     0,   169,    -2,     0,   222,     0,   218,     0,   231,
  605.    233,     0,   143,     0,   145,   146,   147,     0,     0,   220,
  606.    174,   221,     0,   224,   121,    -2,     0,   230,   271,     0,
  607.    188,     0,   269,   272,   273,     0,   277,     0,     0,     0,
  608.      0,     0,   196,   271,   250,     0,   282,   284,     0,     0,
  609.    254,    -2,   287,   288,     0,    -2,     0,   256,   257,   261,
  610.    278,   279,   300,   300,    12,     0,    14,    15,    29,    52,
  611.     30,     0,    32,    34,    35,    66,   112,     0,     0,     0,
  612.    105,     0,    82,     0,   108,   106,     0,     0,   127,     0,
  613.     99,    74,     0,   102,     0,   241,   200,   209,     0,     0,
  614.      0,   241,     0,    70,   211,     0,     0,   140,    -2,     0,
  615.      0,   219,     0,     0,     0,     0,     0,     0,     0,     0,
  616.      0,     0,     0,   162,   163,   164,   165,   166,   167,   234,
  617.      0,   143,   152,   158,     0,     0,     0,   119,    -2,   268,
  618.      0,     0,   274,   275,   276,   192,   193,   194,   195,   197,
  619.    267,     0,   252,     0,   251,     0,     0,     0,     0,   143,
  620.      0,     0,   280,   281,    23,     0,    25,    27,    16,   110,
  621.     31,     0,    50,     0,     0,    51,     0,    91,    93,    95,
  622.      0,    97,   175,   176,     0,    71,    81,     0,    89,     0,
  623.      0,     0,   128,   130,   132,   135,   136,    48,     0,     0,
  624.    228,     0,     0,     0,    67,     0,   170,   173,     0,   212,
  625.      0,   232,   148,   149,   150,   151,    -2,   154,   155,   156,
  626.    157,   159,   144,     0,   207,     0,     0,   228,   270,   271,
  627.    189,   283,     0,    -2,   290,    -2,   292,    -2,   294,    -2,
  628.      0,     0,     0,    24,     0,     0,    66,    33,   111,     0,
  629.    113,   115,   118,   117,    92,     0,    96,    83,    90,   109,
  630.      0,   124,     0,     0,     0,   103,   104,     0,     0,   208,
  631.    237,   204,   241,   171,   173,     0,   142,     0,   143,     0,
  632.    120,     0,     0,   168,    -2,     0,     0,     0,    26,    28,
  633.     49,   114,     0,    94,    95,     0,     0,   129,   131,   137,
  634.    199,   210,     0,    68,   172,     0,   184,   226,   227,   285,
  635.    297,   298,   299,   116,   118,    87,   107,   238,     0,     0,
  636.    216 };
  637. typedef struct { char *t_name; int t_val; } yytoktype;
  638. #ifndef YYDEBUG
  639. #    define YYDEBUG    0    /* don't allow debugging */
  640. #endif
  641.  
  642. #if YYDEBUG
  643.  
  644. yytoktype yytoks[] =
  645. {
  646.     "SEOS",    1,
  647.     "SCOMMENT",    2,
  648.     "SLABEL",    3,
  649.     "SUNKNOWN",    4,
  650.     "SHOLLERITH",    5,
  651.     "SICON",    6,
  652.     "SRCON",    7,
  653.     "SDCON",    8,
  654.     "SBITCON",    9,
  655.     "SOCTCON",    10,
  656.     "SHEXCON",    11,
  657.     "STRUE",    12,
  658.     "SFALSE",    13,
  659.     "SNAME",    14,
  660.     "SNAMEEQ",    15,
  661.     "SFIELD",    16,
  662.     "SSCALE",    17,
  663.     "SINCLUDE",    18,
  664.     "SLET",    19,
  665.     "SASSIGN",    20,
  666.     "SAUTOMATIC",    21,
  667.     "SBACKSPACE",    22,
  668.     "SBLOCK",    23,
  669.     "SCALL",    24,
  670.     "SCHARACTER",    25,
  671.     "SCLOSE",    26,
  672.     "SCOMMON",    27,
  673.     "SCOMPLEX",    28,
  674.     "SCONTINUE",    29,
  675.     "SDATA",    30,
  676.     "SDCOMPLEX",    31,
  677.     "SDIMENSION",    32,
  678.     "SDO",    33,
  679.     "SDOUBLE",    34,
  680.     "SELSE",    35,
  681.     "SELSEIF",    36,
  682.     "SEND",    37,
  683.     "SENDFILE",    38,
  684.     "SENDIF",    39,
  685.     "SENTRY",    40,
  686.     "SEQUIV",    41,
  687.     "SEXTERNAL",    42,
  688.     "SFORMAT",    43,
  689.     "SFUNCTION",    44,
  690.     "SGOTO",    45,
  691.     "SASGOTO",    46,
  692.     "SCOMPGOTO",    47,
  693.     "SARITHIF",    48,
  694.     "SLOGIF",    49,
  695.     "SIMPLICIT",    50,
  696.     "SINQUIRE",    51,
  697.     "SINTEGER",    52,
  698.     "SINTRINSIC",    53,
  699.     "SLOGICAL",    54,
  700.     "SNAMELIST",    55,
  701.     "SOPEN",    56,
  702.     "SPARAM",    57,
  703.     "SPAUSE",    58,
  704.     "SPRINT",    59,
  705.     "SPROGRAM",    60,
  706.     "SPUNCH",    61,
  707.     "SREAD",    62,
  708.     "SREAL",    63,
  709.     "SRETURN",    64,
  710.     "SREWIND",    65,
  711.     "SSAVE",    66,
  712.     "SSTATIC",    67,
  713.     "SSTOP",    68,
  714.     "SSUBROUTINE",    69,
  715.     "STHEN",    70,
  716.     "STO",    71,
  717.     "SUNDEFINED",    72,
  718.     "SWRITE",    73,
  719.     "SLPAR",    74,
  720.     "SRPAR",    75,
  721.     "SEQUALS",    76,
  722.     "SCOLON",    77,
  723.     "SCOMMA",    78,
  724.     "SCURRENCY",    79,
  725.     "SPLUS",    80,
  726.     "SMINUS",    81,
  727.     "SSTAR",    82,
  728.     "SSLASH",    83,
  729.     "SPOWER",    84,
  730.     "SCONCAT",    85,
  731.     "SAND",    86,
  732.     "SOR",    87,
  733.     "SNEQV",    88,
  734.     "SEQV",    89,
  735.     "SNOT",    90,
  736.     "SEQ",    91,
  737.     "SLT",    92,
  738.     "SGT",    93,
  739.     "SLE",    94,
  740.     "SGE",    95,
  741.     "SNE",    96,
  742.     "SENDDO",    97,
  743.     "SWHILE",    98,
  744.     "SSLASHD",    99,
  745.     "-unknown-",    -1    /* ends search */
  746. };
  747.  
  748. char * yyreds[] =
  749. {
  750.     "-no such reduction-",
  751.     "program : /* empty */",
  752.     "program : program stat SEOS",
  753.     "stat : thislabel entry",
  754.     "stat : thislabel spec",
  755.     "stat : thislabel exec",
  756.     "stat : thislabel SINCLUDE filename",
  757.     "stat : thislabel SEND end_spec",
  758.     "stat : thislabel SUNKNOWN",
  759.     "stat : error",
  760.     "thislabel : SLABEL",
  761.     "entry : SPROGRAM new_proc progname",
  762.     "entry : SPROGRAM new_proc progname progarglist",
  763.     "entry : SBLOCK new_proc progname",
  764.     "entry : SSUBROUTINE new_proc entryname arglist",
  765.     "entry : SFUNCTION new_proc entryname arglist",
  766.     "entry : type SFUNCTION new_proc entryname arglist",
  767.     "entry : SENTRY entryname arglist",
  768.     "new_proc : /* empty */",
  769.     "entryname : name",
  770.     "name : SNAME",
  771.     "progname : /* empty */",
  772.     "progname : entryname",
  773.     "progarglist : SLPAR SRPAR",
  774.     "progarglist : SLPAR progargs SRPAR",
  775.     "progargs : progarg",
  776.     "progargs : progargs SCOMMA progarg",
  777.     "progarg : SNAME",
  778.     "progarg : SNAME SEQUALS SNAME",
  779.     "arglist : /* empty */",
  780.     "arglist : SLPAR SRPAR",
  781.     "arglist : SLPAR args SRPAR",
  782.     "args : arg",
  783.     "args : args SCOMMA arg",
  784.     "arg : name",
  785.     "arg : SSTAR",
  786.     "filename : SHOLLERITH",
  787.     "spec : dcl",
  788.     "spec : common",
  789.     "spec : external",
  790.     "spec : intrinsic",
  791.     "spec : equivalence",
  792.     "spec : data",
  793.     "spec : implicit",
  794.     "spec : namelist",
  795.     "spec : SSAVE",
  796.     "spec : SSAVE savelist",
  797.     "spec : SFORMAT",
  798.     "spec : SPARAM in_dcl SLPAR paramlist SRPAR",
  799.     "dcl : type opt_comma name in_dcl new_dcl dims lengspec",
  800.     "dcl : dcl SCOMMA name dims lengspec",
  801.     "dcl : dcl SSLASHD datainit vallist SSLASHD",
  802.     "new_dcl : /* empty */",
  803.     "type : typespec lengspec",
  804.     "typespec : typename",
  805.     "typename : SINTEGER",
  806.     "typename : SREAL",
  807.     "typename : SCOMPLEX",
  808.     "typename : SDOUBLE",
  809.     "typename : SDCOMPLEX",
  810.     "typename : SLOGICAL",
  811.     "typename : SCHARACTER",
  812.     "typename : SUNDEFINED",
  813.     "typename : SDIMENSION",
  814.     "typename : SAUTOMATIC",
  815.     "typename : SSTATIC",
  816.     "lengspec : /* empty */",
  817.     "lengspec : SSTAR intonlyon expr intonlyoff",
  818.     "lengspec : SSTAR intonlyon SLPAR SSTAR SRPAR intonlyoff",
  819.     "common : SCOMMON in_dcl var",
  820.     "common : SCOMMON in_dcl comblock var",
  821.     "common : common opt_comma comblock opt_comma var",
  822.     "common : common SCOMMA var",
  823.     "comblock : SCONCAT",
  824.     "comblock : SSLASH SNAME SSLASH",
  825.     "external : SEXTERNAL in_dcl name",
  826.     "external : external SCOMMA name",
  827.     "intrinsic : SINTRINSIC in_dcl name",
  828.     "intrinsic : intrinsic SCOMMA name",
  829.     "equivalence : SEQUIV in_dcl equivset",
  830.     "equivalence : equivalence SCOMMA equivset",
  831.     "equivset : SLPAR equivlist SRPAR",
  832.     "equivlist : lhs",
  833.     "equivlist : equivlist SCOMMA lhs",
  834.     "data : SDATA in_data datalist",
  835.     "data : data opt_comma datalist",
  836.     "in_data : /* empty */",
  837.     "datalist : datainit datavarlist SSLASH datapop vallist SSLASH",
  838.     "datainit : /* empty */",
  839.     "datapop : /* empty */",
  840.     "vallist : /* empty */",
  841.     "vallist : val",
  842.     "vallist : vallist SCOMMA val",
  843.     "val : value",
  844.     "val : simple SSTAR value",
  845.     "value : simple",
  846.     "value : addop simple",
  847.     "value : complex_const",
  848.     "savelist : saveitem",
  849.     "savelist : savelist SCOMMA saveitem",
  850.     "saveitem : name",
  851.     "saveitem : comblock",
  852.     "paramlist : paramitem",
  853.     "paramlist : paramlist SCOMMA paramitem",
  854.     "paramitem : name SEQUALS expr",
  855.     "var : name dims",
  856.     "datavar : lhs",
  857.     "datavar : SLPAR datavarlist SCOMMA dospec SRPAR",
  858.     "datavarlist : datavar",
  859.     "datavarlist : datavarlist SCOMMA datavar",
  860.     "dims : /* empty */",
  861.     "dims : SLPAR dimlist SRPAR",
  862.     "dimlist : /* empty */",
  863.     "dimlist : dim",
  864.     "dimlist : dimlist SCOMMA dim",
  865.     "dim : ubound",
  866.     "dim : expr SCOLON ubound",
  867.     "ubound : SSTAR",
  868.     "ubound : expr",
  869.     "labellist : label",
  870.     "labellist : labellist SCOMMA label",
  871.     "label : SICON",
  872.     "implicit : SIMPLICIT in_dcl implist",
  873.     "implicit : implicit SCOMMA implist",
  874.     "implist : imptype SLPAR letgroups SRPAR",
  875.     "implist : imptype",
  876.     "imptype : /* empty */",
  877.     "imptype : type",
  878.     "letgroups : letgroup",
  879.     "letgroups : letgroups SCOMMA letgroup",
  880.     "letgroup : letter",
  881.     "letgroup : letter SMINUS letter",
  882.     "letter : SNAME",
  883.     "namelist : SNAMELIST",
  884.     "namelist : namelist namelistentry",
  885.     "namelistentry : SSLASH name SSLASH namelistlist",
  886.     "namelistlist : name",
  887.     "namelistlist : namelistlist SCOMMA name",
  888.     "in_dcl : /* empty */",
  889.     "funarglist : /* empty */",
  890.     "funarglist : funargs",
  891.     "funargs : expr",
  892.     "funargs : funargs SCOMMA expr",
  893.     "expr : uexpr",
  894.     "expr : SLPAR expr SRPAR",
  895.     "expr : complex_const",
  896.     "uexpr : lhs",
  897.     "uexpr : simple_const",
  898.     "uexpr : expr addop expr",
  899.     "uexpr : expr SSTAR expr",
  900.     "uexpr : expr SSLASH expr",
  901.     "uexpr : expr SPOWER expr",
  902.     "uexpr : addop expr",
  903.     "uexpr : expr relop expr",
  904.     "uexpr : expr SEQV expr",
  905.     "uexpr : expr SNEQV expr",
  906.     "uexpr : expr SOR expr",
  907.     "uexpr : expr SAND expr",
  908.     "uexpr : SNOT expr",
  909.     "uexpr : expr SCONCAT expr",
  910.     "addop : SPLUS",
  911.     "addop : SMINUS",
  912.     "relop : SEQ",
  913.     "relop : SGT",
  914.     "relop : SLT",
  915.     "relop : SGE",
  916.     "relop : SLE",
  917.     "relop : SNE",
  918.     "lhs : name",
  919.     "lhs : name substring",
  920.     "lhs : name SLPAR funarglist SRPAR",
  921.     "lhs : name SLPAR funarglist SRPAR substring",
  922.     "substring : SLPAR opt_expr SCOLON opt_expr SRPAR",
  923.     "opt_expr : /* empty */",
  924.     "opt_expr : expr",
  925.     "simple : name",
  926.     "simple : simple_const",
  927.     "simple_const : STRUE",
  928.     "simple_const : SFALSE",
  929.     "simple_const : SHOLLERITH",
  930.     "simple_const : SICON",
  931.     "simple_const : SRCON",
  932.     "simple_const : SDCON",
  933.     "simple_const : bit_const",
  934.     "complex_const : SLPAR uexpr SCOMMA uexpr SRPAR",
  935.     "bit_const : SHEXCON",
  936.     "bit_const : SOCTCON",
  937.     "bit_const : SBITCON",
  938.     "fexpr : unpar_fexpr",
  939.     "fexpr : SLPAR fexpr SRPAR",
  940.     "unpar_fexpr : lhs",
  941.     "unpar_fexpr : simple_const",
  942.     "unpar_fexpr : fexpr addop fexpr",
  943.     "unpar_fexpr : fexpr SSTAR fexpr",
  944.     "unpar_fexpr : fexpr SSLASH fexpr",
  945.     "unpar_fexpr : fexpr SPOWER fexpr",
  946.     "unpar_fexpr : addop fexpr",
  947.     "unpar_fexpr : fexpr SCONCAT fexpr",
  948.     "exec : iffable",
  949.     "exec : SDO end_spec intonlyon label intonlyoff opt_comma dospecw",
  950.     "exec : SDO end_spec opt_comma dospecw",
  951.     "exec : SENDDO",
  952.     "exec : logif iffable",
  953.     "exec : logif STHEN",
  954.     "exec : SELSEIF end_spec SLPAR expr SRPAR STHEN",
  955.     "exec : SELSE end_spec",
  956.     "exec : SENDIF end_spec",
  957.     "logif : SLOGIF end_spec SLPAR expr SRPAR",
  958.     "dospec : name SEQUALS exprlist",
  959.     "dospecw : dospec",
  960.     "dospecw : SWHILE SLPAR expr SRPAR",
  961.     "iffable : let lhs SEQUALS expr",
  962.     "iffable : SASSIGN end_spec assignlabel STO name",
  963.     "iffable : SCONTINUE end_spec",
  964.     "iffable : goto",
  965.     "iffable : io",
  966.     "iffable : SARITHIF end_spec SLPAR expr SRPAR label SCOMMA label SCOMMA label",
  967.     "iffable : call",
  968.     "iffable : call SLPAR SRPAR",
  969.     "iffable : call SLPAR callarglist SRPAR",
  970.     "iffable : SRETURN end_spec opt_expr",
  971.     "iffable : stop end_spec opt_expr",
  972.     "assignlabel : SICON",
  973.     "let : SLET",
  974.     "goto : SGOTO end_spec label",
  975.     "goto : SASGOTO end_spec name",
  976.     "goto : SASGOTO end_spec name opt_comma SLPAR labellist SRPAR",
  977.     "goto : SCOMPGOTO end_spec SLPAR labellist SRPAR opt_comma expr",
  978.     "opt_comma : /* empty */",
  979.     "opt_comma : SCOMMA",
  980.     "call : SCALL end_spec name",
  981.     "callarglist : callarg",
  982.     "callarglist : callarglist SCOMMA callarg",
  983.     "callarg : expr",
  984.     "callarg : SSTAR label",
  985.     "stop : SPAUSE",
  986.     "stop : SSTOP",
  987.     "exprlist : expr",
  988.     "exprlist : exprlist SCOMMA expr",
  989.     "end_spec : /* empty */",
  990.     "intonlyon : /* empty */",
  991.     "intonlyoff : /* empty */",
  992.     "io : io1",
  993.     "io1 : iofmove ioctl",
  994.     "io1 : iofmove unpar_fexpr",
  995.     "io1 : iofmove SSTAR",
  996.     "io1 : iofmove SPOWER",
  997.     "io1 : iofctl ioctl",
  998.     "io1 : read ioctl",
  999.     "io1 : read infmt",
  1000.     "io1 : read ioctl inlist",
  1001.     "io1 : read infmt SCOMMA inlist",
  1002.     "io1 : read ioctl SCOMMA inlist",
  1003.     "io1 : write ioctl",
  1004.     "io1 : write ioctl outlist",
  1005.     "io1 : print",
  1006.     "io1 : print SCOMMA outlist",
  1007.     "iofmove : fmkwd end_spec in_ioctl",
  1008.     "fmkwd : SBACKSPACE",
  1009.     "fmkwd : SREWIND",
  1010.     "fmkwd : SENDFILE",
  1011.     "iofctl : ctlkwd end_spec in_ioctl",
  1012.     "ctlkwd : SINQUIRE",
  1013.     "ctlkwd : SOPEN",
  1014.     "ctlkwd : SCLOSE",
  1015.     "infmt : unpar_fexpr",
  1016.     "infmt : SSTAR",
  1017.     "ioctl : SLPAR fexpr SRPAR",
  1018.     "ioctl : SLPAR ctllist SRPAR",
  1019.     "ctllist : ioclause",
  1020.     "ctllist : ctllist SCOMMA ioclause",
  1021.     "ioclause : fexpr",
  1022.     "ioclause : SSTAR",
  1023.     "ioclause : SPOWER",
  1024.     "ioclause : nameeq expr",
  1025.     "ioclause : nameeq SSTAR",
  1026.     "ioclause : nameeq SPOWER",
  1027.     "nameeq : SNAMEEQ",
  1028.     "read : SREAD end_spec in_ioctl",
  1029.     "write : SWRITE end_spec in_ioctl",
  1030.     "print : SPRINT end_spec fexpr in_ioctl",
  1031.     "print : SPRINT end_spec SSTAR in_ioctl",
  1032.     "inlist : inelt",
  1033.     "inlist : inlist SCOMMA inelt",
  1034.     "inelt : lhs",
  1035.     "inelt : SLPAR inlist SCOMMA dospec SRPAR",
  1036.     "outlist : uexpr",
  1037.     "outlist : other",
  1038.     "outlist : out2",
  1039.     "out2 : uexpr SCOMMA uexpr",
  1040.     "out2 : uexpr SCOMMA other",
  1041.     "out2 : other SCOMMA uexpr",
  1042.     "out2 : other SCOMMA other",
  1043.     "out2 : out2 SCOMMA uexpr",
  1044.     "out2 : out2 SCOMMA other",
  1045.     "other : complex_const",
  1046.     "other : SLPAR expr SRPAR",
  1047.     "other : SLPAR uexpr SCOMMA dospec SRPAR",
  1048.     "other : SLPAR other SCOMMA dospec SRPAR",
  1049.     "other : SLPAR out2 SCOMMA dospec SRPAR",
  1050.     "in_ioctl : /* empty */",
  1051. };
  1052. #endif /* YYDEBUG */
  1053. #line 1 "/usr/lib/yaccpar"
  1054. /*    @(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10    */
  1055.  
  1056. /*
  1057. ** Skeleton parser driver for yacc output
  1058. */
  1059.  
  1060. /*
  1061. ** yacc user known macros and defines
  1062. */
  1063. #define YYERROR        goto yyerrlab
  1064. #define YYACCEPT    { free(yys); free(yyv); return(0); }
  1065. #define YYABORT        { free(yys); free(yyv); return(1); }
  1066. #define YYBACKUP( newtoken, newvalue )\
  1067. {\
  1068.     if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
  1069.     {\
  1070.         yyerror( "syntax error - cannot backup" );\
  1071.         goto yyerrlab;\
  1072.     }\
  1073.     yychar = newtoken;\
  1074.     yystate = *yyps;\
  1075.     yylval = newvalue;\
  1076.     goto yynewstate;\
  1077. }
  1078. #define YYRECOVERING()    (!!yyerrflag)
  1079. #ifndef YYDEBUG
  1080. #    define YYDEBUG    1    /* make debugging available */
  1081. #endif
  1082.  
  1083. /*
  1084. ** user known globals
  1085. */
  1086. int yydebug;            /* set to 1 to get debugging */
  1087.  
  1088. /*
  1089. ** driver internal defines
  1090. */
  1091. #define YYFLAG        (-1000)
  1092.  
  1093. /*
  1094. ** static variables used by the parser
  1095. */
  1096. static YYSTYPE *yyv;            /* value stack */
  1097. static int *yys;            /* state stack */
  1098.  
  1099. static YYSTYPE *yypv;            /* top of value stack */
  1100. static int *yyps;            /* top of state stack */
  1101.  
  1102. static int yystate;            /* current state */
  1103. static int yytmp;            /* extra var (lasts between blocks) */
  1104.  
  1105. int yynerrs;            /* number of errors */
  1106.  
  1107. int yyerrflag;            /* error recovery flag */
  1108. int yychar;            /* current input token number */
  1109.  
  1110.  
  1111. /*
  1112. ** yyparse - return 0 if worked, 1 if syntax error not recovered from
  1113. */
  1114. int
  1115. yyparse()
  1116. {
  1117.     register YYSTYPE *yypvt;    /* top of value stack for $vars */
  1118.     unsigned yymaxdepth = YYMAXDEPTH;
  1119.  
  1120.     /*
  1121.     ** Initialize externals - yyparse may be called more than once
  1122.     */
  1123.     yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE));
  1124.     yys = (int*)malloc(yymaxdepth*sizeof(int));
  1125.     if (!yyv || !yys)
  1126.     {
  1127.         yyerror( "out of memory" );
  1128.         return(1);
  1129.     }
  1130.     yypv = &yyv[-1];
  1131.     yyps = &yys[-1];
  1132.     yystate = 0;
  1133.     yytmp = 0;
  1134.     yynerrs = 0;
  1135.     yyerrflag = 0;
  1136.     yychar = -1;
  1137.  
  1138.     goto yystack;
  1139.     {
  1140.         register YYSTYPE *yy_pv;    /* top of value stack */
  1141.         register int *yy_ps;        /* top of state stack */
  1142.         register int yy_state;        /* current state */
  1143.         register int  yy_n;        /* internal state number info */
  1144.  
  1145.         /*
  1146.         ** get globals into registers.
  1147.         ** branch to here only if YYBACKUP was called.
  1148.         */
  1149.     yynewstate:
  1150.         yy_pv = yypv;
  1151.         yy_ps = yyps;
  1152.         yy_state = yystate;
  1153.         goto yy_newstate;
  1154.  
  1155.         /*
  1156.         ** get globals into registers.
  1157.         ** either we just started, or we just finished a reduction
  1158.         */
  1159.     yystack:
  1160.         yy_pv = yypv;
  1161.         yy_ps = yyps;
  1162.         yy_state = yystate;
  1163.  
  1164.         /*
  1165.         ** top of for (;;) loop while no reductions done
  1166.         */
  1167.     yy_stack:
  1168.         /*
  1169.         ** put a state and value onto the stacks
  1170.         */
  1171. #if YYDEBUG
  1172.         /*
  1173.         ** if debugging, look up token value in list of value vs.
  1174.         ** name pairs.  0 and negative (-1) are special values.
  1175.         ** Note: linear search is used since time is not a real
  1176.         ** consideration while debugging.
  1177.         */
  1178.         if ( yydebug )
  1179.         {
  1180.             register int yy_i;
  1181.  
  1182.             (void)printf( "State %d, token ", yy_state );
  1183.             if ( yychar == 0 )
  1184.                 (void)printf( "end-of-file\n" );
  1185.             else if ( yychar < 0 )
  1186.                 (void)printf( "-none-\n" );
  1187.             else
  1188.             {
  1189.                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1190.                     yy_i++ )
  1191.                 {
  1192.                     if ( yytoks[yy_i].t_val == yychar )
  1193.                         break;
  1194.                 }
  1195.                 (void)printf( "%s\n", yytoks[yy_i].t_name );
  1196.             }
  1197.         }
  1198. #endif /* YYDEBUG */
  1199.         if ( ++yy_ps >= &yys[ yymaxdepth ] )    /* room on stack? */
  1200.         {
  1201.             /*
  1202.             ** reallocate and recover.  Note that pointers
  1203.             ** have to be reset, or bad things will happen
  1204.             */
  1205.             int yyps_index = (yy_ps - yys);
  1206.             int yypv_index = (yy_pv - yyv);
  1207.             int yypvt_index = (yypvt - yyv);
  1208.             yymaxdepth += YYMAXDEPTH;
  1209.             yyv = (YYSTYPE*)realloc((char*)yyv,
  1210.                 yymaxdepth * sizeof(YYSTYPE));
  1211.             yys = (int*)realloc((char*)yys,
  1212.                 yymaxdepth * sizeof(int));
  1213.             if (!yyv || !yys)
  1214.             {
  1215.                 yyerror( "yacc stack overflow" );
  1216.                 return(1);
  1217.             }
  1218.             yy_ps = yys + yyps_index;
  1219.             yy_pv = yyv + yypv_index;
  1220.             yypvt = yyv + yypvt_index;
  1221.         }
  1222.         *yy_ps = yy_state;
  1223.         *++yy_pv = yyval;
  1224.  
  1225.         /*
  1226.         ** we have a new state - find out what to do
  1227.         */
  1228.     yy_newstate:
  1229.         if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
  1230.             goto yydefault;        /* simple state */
  1231. #if YYDEBUG
  1232.         /*
  1233.         ** if debugging, need to mark whether new token grabbed
  1234.         */
  1235.         yytmp = yychar < 0;
  1236. #endif
  1237.         if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1238.             yychar = 0;        /* reached EOF */
  1239. #if YYDEBUG
  1240.         if ( yydebug && yytmp )
  1241.         {
  1242.             register int yy_i;
  1243.  
  1244.             (void)printf( "Received token " );
  1245.             if ( yychar == 0 )
  1246.                 (void)printf( "end-of-file\n" );
  1247.             else if ( yychar < 0 )
  1248.                 (void)printf( "-none-\n" );
  1249.             else
  1250.             {
  1251.                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
  1252.                     yy_i++ )
  1253.                 {
  1254.                     if ( yytoks[yy_i].t_val == yychar )
  1255.                         break;
  1256.                 }
  1257.                 (void)printf( "%s\n", yytoks[yy_i].t_name );
  1258.             }
  1259.         }
  1260. #endif /* YYDEBUG */
  1261.         if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
  1262.             goto yydefault;
  1263.         if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )    /*valid shift*/
  1264.         {
  1265.             yychar = -1;
  1266.             yyval = yylval;
  1267.             yy_state = yy_n;
  1268.             if ( yyerrflag > 0 )
  1269.                 yyerrflag--;
  1270.             goto yy_stack;
  1271.         }
  1272.  
  1273.     yydefault:
  1274.         if ( ( yy_n = yydef[ yy_state ] ) == -2 )
  1275.         {
  1276. #if YYDEBUG
  1277.             yytmp = yychar < 0;
  1278. #endif
  1279.             if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
  1280.                 yychar = 0;        /* reached EOF */
  1281. #if YYDEBUG
  1282.             if ( yydebug && yytmp )
  1283.             {
  1284.                 register int yy_i;
  1285.  
  1286.                 (void)printf( "Received token " );
  1287.                 if ( yychar == 0 )
  1288.                     (void)printf( "end-of-file\n" );
  1289.                 else if ( yychar < 0 )
  1290.                     (void)printf( "-none-\n" );
  1291.                 else
  1292.                 {
  1293.                     for ( yy_i = 0;
  1294.                         yytoks[yy_i].t_val >= 0;
  1295.                         yy_i++ )
  1296.                     {
  1297.                         if ( yytoks[yy_i].t_val
  1298.                             == yychar )
  1299.                         {
  1300.                             break;
  1301.                         }
  1302.                     }
  1303.                     (void)printf( "%s\n", yytoks[yy_i].t_name );
  1304.                 }
  1305.             }
  1306. #endif /* YYDEBUG */
  1307.             /*
  1308.             ** look through exception table
  1309.             */
  1310.             {
  1311.                 register int *yyxi = yyexca;
  1312.  
  1313.                 while ( ( *yyxi != -1 ) ||
  1314.                     ( yyxi[1] != yy_state ) )
  1315.                 {
  1316.                     yyxi += 2;
  1317.                 }
  1318.                 while ( ( *(yyxi += 2) >= 0 ) &&
  1319.                     ( *yyxi != yychar ) )
  1320.                     ;
  1321.                 if ( ( yy_n = yyxi[1] ) < 0 )
  1322.                     YYACCEPT;
  1323.             }
  1324.         }
  1325.  
  1326.         /*
  1327.         ** check for syntax error
  1328.         */
  1329.         if ( yy_n == 0 )    /* have an error */
  1330.         {
  1331.             /* no worry about speed here! */
  1332.             switch ( yyerrflag )
  1333.             {
  1334.             case 0:        /* new error */
  1335.                 yyerror( "syntax error" );
  1336.                 goto skip_init;
  1337.             yyerrlab:
  1338.                 /*
  1339.                 ** get globals into registers.
  1340.                 ** we have a user generated syntax type error
  1341.                 */
  1342.                 yy_pv = yypv;
  1343.                 yy_ps = yyps;
  1344.                 yy_state = yystate;
  1345.                 yynerrs++;
  1346.             skip_init:
  1347.             case 1:
  1348.             case 2:        /* incompletely recovered error */
  1349.                     /* try again... */
  1350.                 yyerrflag = 3;
  1351.                 /*
  1352.                 ** find state where "error" is a legal
  1353.                 ** shift action
  1354.                 */
  1355.                 while ( yy_ps >= yys )
  1356.                 {
  1357.                     yy_n = yypact[ *yy_ps ] + YYERRCODE;
  1358.                     if ( yy_n >= 0 && yy_n < YYLAST &&
  1359.                         yychk[yyact[yy_n]] == YYERRCODE)                    {
  1360.                         /*
  1361.                         ** simulate shift of "error"
  1362.                         */
  1363.                         yy_state = yyact[ yy_n ];
  1364.                         goto yy_stack;
  1365.                     }
  1366.                     /*
  1367.                     ** current state has no shift on
  1368.                     ** "error", pop stack
  1369.                     */
  1370. #if YYDEBUG
  1371. #    define _POP_ "Error recovery pops state %d, uncovers state %d\n"
  1372.                     if ( yydebug )
  1373.                         (void)printf( _POP_, *yy_ps,
  1374.                             yy_ps[-1] );
  1375. #    undef _POP_
  1376. #endif
  1377.                     yy_ps--;
  1378.                     yy_pv--;
  1379.                 }
  1380.                 /*
  1381.                 ** there is no state on stack with "error" as
  1382.                 ** a valid shift.  give up.
  1383.                 */
  1384.                 YYABORT;
  1385.             case 3:        /* no shift yet; eat a token */
  1386. #if YYDEBUG
  1387.                 /*
  1388.                 ** if debugging, look up token in list of
  1389.                 ** pairs.  0 and negative shouldn't occur,
  1390.                 ** but since timing doesn't matter when
  1391.                 ** debugging, it doesn't hurt to leave the
  1392.                 ** tests here.
  1393.                 */
  1394.                 if ( yydebug )
  1395.                 {
  1396.                     register int yy_i;
  1397.  
  1398.                     (void)printf( "Error recovery discards " );
  1399.                     if ( yychar == 0 )
  1400.                         (void)printf( "token end-of-file\n" );
  1401.                     else if ( yychar < 0 )
  1402.                         (void)printf( "token -none-\n" );
  1403.                     else
  1404.                     {
  1405.                         for ( yy_i = 0;
  1406.                             yytoks[yy_i].t_val >= 0;
  1407.                             yy_i++ )
  1408.                         {
  1409.                             if ( yytoks[yy_i].t_val
  1410.                                 == yychar )
  1411.                             {
  1412.                                 break;
  1413.                             }
  1414.                         }
  1415.                         (void)printf( "token %s\n",
  1416.                             yytoks[yy_i].t_name );
  1417.                     }
  1418.                 }
  1419. #endif /* YYDEBUG */
  1420.                 if ( yychar == 0 )    /* reached EOF. quit */
  1421.                     YYABORT;
  1422.                 yychar = -1;
  1423.                 goto yy_newstate;
  1424.             }
  1425.         }/* end if ( yy_n == 0 ) */
  1426.         /*
  1427.         ** reduction by production yy_n
  1428.         ** put stack tops, etc. so things right after switch
  1429.         */
  1430. #if YYDEBUG
  1431.         /*
  1432.         ** if debugging, print the string that is the user's
  1433.         ** specification of the reduction which is just about
  1434.         ** to be done.
  1435.         */
  1436.         if ( yydebug )
  1437.             (void)printf( "Reduce by (%d) \"%s\"\n",
  1438.                 yy_n, yyreds[ yy_n ] );
  1439. #endif
  1440.         yytmp = yy_n;            /* value to switch over */
  1441.         yypvt = yy_pv;            /* $vars top of value stack */
  1442.         /*
  1443.         ** Look in goto table for next state
  1444.         ** Sorry about using yy_state here as temporary
  1445.         ** register variable, but why not, if it works...
  1446.         ** If yyr2[ yy_n ] doesn't have the low order bit
  1447.         ** set, then there is no action to be done for
  1448.         ** this reduction.  So, no saving & unsaving of
  1449.         ** registers done.  The only difference between the
  1450.         ** code just after the if and the body of the if is
  1451.         ** the goto yy_stack in the body.  This way the test
  1452.         ** can be made before the choice of what to do is needed.
  1453.         */
  1454.         {
  1455.             /* length of production doubled with extra bit */
  1456.             register int yy_len = yyr2[ yy_n ];
  1457.  
  1458.             if ( !( yy_len & 01 ) )
  1459.             {
  1460.                 yy_len >>= 1;
  1461.                 yyval = ( yy_pv -= yy_len )[1];    /* $$ = $1 */
  1462.                 yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1463.                     *( yy_ps -= yy_len ) + 1;
  1464.                 if ( yy_state >= YYLAST ||
  1465.                     yychk[ yy_state =
  1466.                     yyact[ yy_state ] ] != -yy_n )
  1467.                 {
  1468.                     yy_state = yyact[ yypgo[ yy_n ] ];
  1469.                 }
  1470.                 goto yy_stack;
  1471.             }
  1472.             yy_len >>= 1;
  1473.             yyval = ( yy_pv -= yy_len )[1];    /* $$ = $1 */
  1474.             yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
  1475.                 *( yy_ps -= yy_len ) + 1;
  1476.             if ( yy_state >= YYLAST ||
  1477.                 yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
  1478.             {
  1479.                 yy_state = yyact[ yypgo[ yy_n ] ];
  1480.             }
  1481.         }
  1482.                     /* save until reenter driver code */
  1483.         yystate = yy_state;
  1484.         yyps = yy_ps;
  1485.         yypv = yy_pv;
  1486.     }
  1487.     /*
  1488.     ** code supplied by user is placed in this switch
  1489.     */
  1490.     switch( yytmp )
  1491.     {
  1492.         
  1493. case 3:
  1494. /* # line 225 "gram.in" */
  1495. {
  1496. /* stat:   is the nonterminal for Fortran statements */
  1497.  
  1498.           lastwasbranch = NO; } break;
  1499. case 5:
  1500. /* # line 231 "gram.in" */
  1501. { /* forbid further statement function definitions... */
  1502.           if (parstate == INDATA && laststfcn != thisstno)
  1503.             parstate = INEXEC;
  1504.           thisstno++;
  1505.           if(yypvt[-1].labval && (yypvt[-1].labval->labelno==dorange))
  1506.             enddo(yypvt[-1].labval->labelno);
  1507.           if(lastwasbranch && thislabel==NULL)
  1508.             warn("statement cannot be reached");
  1509.           lastwasbranch = thiswasbranch;
  1510.           thiswasbranch = NO;
  1511.           if(yypvt[-1].labval)
  1512.             {
  1513.             if(yypvt[-1].labval->labtype == LABFORMAT)
  1514.                 err("label already that of a format");
  1515.             else
  1516.                 yypvt[-1].labval->labtype = LABEXEC;
  1517.             }
  1518.           freetemps();
  1519.         } break;
  1520. case 6:
  1521. /* # line 251 "gram.in" */
  1522. { if (can_include)
  1523.             doinclude( yypvt[-0].charpval );
  1524.           else {
  1525.             fprintf(diagfile, "Cannot open file %s\n", yypvt[-0].charpval);
  1526.             done(1);
  1527.             }
  1528.         } break;
  1529. case 7:
  1530. /* # line 259 "gram.in" */
  1531. { if (yypvt[-2].labval)
  1532.             lastwasbranch = NO;
  1533.           endproc(); /* lastwasbranch = NO; -- set in endproc() */
  1534.         } break;
  1535. case 8:
  1536. /* # line 264 "gram.in" */
  1537. { extern void unclassifiable();
  1538.           unclassifiable();
  1539.  
  1540. /* flline flushes the current line, ignoring the rest of the text there */
  1541.  
  1542.           flline(); } break;
  1543. case 9:
  1544. /* # line 271 "gram.in" */
  1545. { flline();  needkwd = NO;  inioctl = NO;
  1546.           yyerrok; yyclearin; } break;
  1547. case 10:
  1548. /* # line 276 "gram.in" */
  1549. {
  1550.         if(yystno != 0)
  1551.             {
  1552.             yyval.labval = thislabel =  mklabel(yystno);
  1553.             if( ! headerdone ) {
  1554.                 if (procclass == CLUNKNOWN)
  1555.                     procclass = CLMAIN;
  1556.                 puthead(CNULL, procclass);
  1557.                 }
  1558.             if(thislabel->labdefined)
  1559.                 execerr("label %s already defined",
  1560.                     convic(thislabel->stateno) );
  1561.             else    {
  1562.                 if(thislabel->blklevel!=0 && thislabel->blklevel<blklevel
  1563.                     && thislabel->labtype!=LABFORMAT)
  1564.                     warn1("there is a branch to label %s from outside block",
  1565.                           convic( (ftnint) (thislabel->stateno) ) );
  1566.                 thislabel->blklevel = blklevel;
  1567.                 thislabel->labdefined = YES;
  1568.                 if(thislabel->labtype != LABFORMAT)
  1569.                     p1_label((long)(thislabel - labeltab));
  1570.                 }
  1571.             }
  1572.         else    yyval.labval = thislabel = NULL;
  1573.         } break;
  1574. case 11:
  1575. /* # line 304 "gram.in" */
  1576. {startproc(yypvt[-0].extval, CLMAIN); } break;
  1577. case 12:
  1578. /* # line 306 "gram.in" */
  1579. {    warn("ignoring arguments to main program");
  1580.             /* hashclear(); */
  1581.             startproc(yypvt[-1].extval, CLMAIN); } break;
  1582. case 13:
  1583. /* # line 310 "gram.in" */
  1584. { if(yypvt[-0].extval) NO66("named BLOCKDATA");
  1585.           startproc(yypvt[-0].extval, CLBLOCK); } break;
  1586. case 14:
  1587. /* # line 313 "gram.in" */
  1588. { entrypt(CLPROC, TYSUBR, (ftnint) 0,  yypvt[-1].extval, yypvt[-0].chval); } break;
  1589. case 15:
  1590. /* # line 315 "gram.in" */
  1591. { entrypt(CLPROC, TYUNKNOWN, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval); } break;
  1592. case 16:
  1593. /* # line 317 "gram.in" */
  1594. { entrypt(CLPROC, yypvt[-4].ival, varleng, yypvt[-1].extval, yypvt[-0].chval); } break;
  1595. case 17:
  1596. /* # line 319 "gram.in" */
  1597. { if(parstate==OUTSIDE || procclass==CLMAIN
  1598.             || procclass==CLBLOCK)
  1599.                 execerr("misplaced entry statement", CNULL);
  1600.           entrypt(CLENTRY, 0, (ftnint) 0, yypvt[-1].extval, yypvt[-0].chval);
  1601.         } break;
  1602. case 18:
  1603. /* # line 327 "gram.in" */
  1604. { newproc(); } break;
  1605. case 19:
  1606. /* # line 331 "gram.in" */
  1607. { yyval.extval = newentry(yypvt[-0].namval, 1); } break;
  1608. case 20:
  1609. /* # line 335 "gram.in" */
  1610. { yyval.namval = mkname(token); } break;
  1611. case 21:
  1612. /* # line 338 "gram.in" */
  1613. { yyval.extval = NULL; } break;
  1614. case 29:
  1615. /* # line 356 "gram.in" */
  1616. { yyval.chval = 0; } break;
  1617. case 30:
  1618. /* # line 358 "gram.in" */
  1619. { NO66(" () argument list");
  1620.           yyval.chval = 0; } break;
  1621. case 31:
  1622. /* # line 361 "gram.in" */
  1623. {yyval.chval = yypvt[-1].chval; } break;
  1624. case 32:
  1625. /* # line 365 "gram.in" */
  1626. { yyval.chval = (yypvt[-0].namval ? mkchain((char *)yypvt[-0].namval,CHNULL) : CHNULL ); } break;
  1627. case 33:
  1628. /* # line 367 "gram.in" */
  1629. { if(yypvt[-0].namval) yypvt[-2].chval = yyval.chval = mkchain((char *)yypvt[-0].namval, yypvt[-2].chval); } break;
  1630. case 34:
  1631. /* # line 371 "gram.in" */
  1632. { if(yypvt[-0].namval->vstg!=STGUNKNOWN && yypvt[-0].namval->vstg!=STGARG)
  1633.             dclerr("name declared as argument after use", yypvt[-0].namval);
  1634.           yypvt[-0].namval->vstg = STGARG;
  1635.         } break;
  1636. case 35:
  1637. /* # line 376 "gram.in" */
  1638. { NO66("altenate return argument");
  1639.  
  1640. /* substars   means that '*'ed formal parameters should be replaced.
  1641.    This is used to specify alternate return labels; in theory, only
  1642.    parameter slots which have '*' should accept the statement labels.
  1643.    This compiler chooses to ignore the '*'s in the formal declaration, and
  1644.    always return the proper value anyway.
  1645.  
  1646.    This variable is only referred to in   proc.c   */
  1647.  
  1648.           yyval.namval = 0;  substars = YES; } break;
  1649. case 36:
  1650. /* # line 392 "gram.in" */
  1651. {
  1652.         char *s;
  1653.         s = copyn(toklen+1, token);
  1654.         s[toklen] = '\0';
  1655.         yyval.charpval = s;
  1656.         } break;
  1657. case 45:
  1658. /* # line 408 "gram.in" */
  1659. { NO66("SAVE statement");
  1660.           saveall = YES; } break;
  1661. case 46:
  1662. /* # line 411 "gram.in" */
  1663. { NO66("SAVE statement"); } break;
  1664. case 47:
  1665. /* # line 413 "gram.in" */
  1666. { fmtstmt(thislabel); setfmt(thislabel); } break;
  1667. case 48:
  1668. /* # line 415 "gram.in" */
  1669. { NO66("PARAMETER statement"); } break;
  1670. case 49:
  1671. /* # line 419 "gram.in" */
  1672. { settype(yypvt[-4].namval, yypvt[-6].ival, yypvt[-0].lval);
  1673.           if(ndim>0) setbound(yypvt[-4].namval,ndim,dims);
  1674.         } break;
  1675. case 50:
  1676. /* # line 423 "gram.in" */
  1677. { settype(yypvt[-2].namval, yypvt[-4].ival, yypvt[-0].lval);
  1678.           if(ndim>0) setbound(yypvt[-2].namval,ndim,dims);
  1679.         } break;
  1680. case 51:
  1681. /* # line 427 "gram.in" */
  1682. { if (new_dcl == 2) {
  1683.             err("attempt to give DATA in type-declaration");
  1684.             new_dcl = 1;
  1685.             }
  1686.         } break;
  1687. case 52:
  1688. /* # line 434 "gram.in" */
  1689. { new_dcl = 2; } break;
  1690. case 53:
  1691. /* # line 437 "gram.in" */
  1692. { varleng = yypvt[-0].lval;
  1693.           if (vartype == TYLOGICAL && varleng == 1) {
  1694.             varleng = 0;
  1695.             err("treating LOGICAL*1 as LOGICAL");
  1696.             --nerr;    /* allow generation of .c file */
  1697.             }
  1698.         } break;
  1699. case 54:
  1700. /* # line 447 "gram.in" */
  1701. { varleng = (yypvt[-0].ival<0 || yypvt[-0].ival==TYLONG ? 0 : typesize[yypvt[-0].ival]);
  1702.           vartype = yypvt[-0].ival; } break;
  1703. case 55:
  1704. /* # line 451 "gram.in" */
  1705. { yyval.ival = TYLONG; } break;
  1706. case 56:
  1707. /* # line 452 "gram.in" */
  1708. { yyval.ival = tyreal; } break;
  1709. case 57:
  1710. /* # line 453 "gram.in" */
  1711. { ++complex_seen; yyval.ival = tycomplex; } break;
  1712. case 58:
  1713. /* # line 454 "gram.in" */
  1714. { yyval.ival = TYDREAL; } break;
  1715. case 59:
  1716. /* # line 455 "gram.in" */
  1717. { ++dcomplex_seen; NOEXT("DOUBLE COMPLEX statement"); yyval.ival = TYDCOMPLEX; } break;
  1718. case 60:
  1719. /* # line 456 "gram.in" */
  1720. { yyval.ival = TYLOGICAL; } break;
  1721. case 61:
  1722. /* # line 457 "gram.in" */
  1723. { NO66("CHARACTER statement"); yyval.ival = TYCHAR; } break;
  1724. case 62:
  1725. /* # line 458 "gram.in" */
  1726. { yyval.ival = TYUNKNOWN; } break;
  1727. case 63:
  1728. /* # line 459 "gram.in" */
  1729. { yyval.ival = TYUNKNOWN; } break;
  1730. case 64:
  1731. /* # line 460 "gram.in" */
  1732. { NOEXT("AUTOMATIC statement"); yyval.ival = - STGAUTO; } break;
  1733. case 65:
  1734. /* # line 461 "gram.in" */
  1735. { NOEXT("STATIC statement"); yyval.ival = - STGBSS; } break;
  1736. case 66:
  1737. /* # line 465 "gram.in" */
  1738. { yyval.lval = varleng; } break;
  1739. case 67:
  1740. /* # line 467 "gram.in" */
  1741. {
  1742.         expptr p;
  1743.         p = yypvt[-1].expval;
  1744.         NO66("length specification *n");
  1745.         if( ! ISICON(p) || p->constblock.Const.ci <= 0 )
  1746.             {
  1747.             yyval.lval = 0;
  1748.             dclerr("length must be a positive integer constant",
  1749.                 NPNULL);
  1750.             }
  1751.         else {
  1752.             if (vartype == TYCHAR)
  1753.                 yyval.lval = p->constblock.Const.ci;
  1754.             else switch((int)p->constblock.Const.ci) {
  1755.                 case 1:    yyval.lval = 1; break;
  1756.                 case 2: yyval.lval = typesize[TYSHORT];    break;
  1757.                 case 4: yyval.lval = typesize[TYLONG];    break;
  1758.                 case 8: yyval.lval = typesize[TYDREAL];    break;
  1759.                 case 16: yyval.lval = typesize[TYDCOMPLEX]; break;
  1760.                 default:
  1761.                     dclerr("invalid length",NPNULL);
  1762.                     yyval.lval = varleng;
  1763.                 }
  1764.             }
  1765.         } break;
  1766. case 68:
  1767. /* # line 493 "gram.in" */
  1768. { NO66("length specification *(*)"); yyval.lval = -1; } break;
  1769. case 69:
  1770. /* # line 497 "gram.in" */
  1771. { incomm( yyval.extval = comblock("") , yypvt[-0].namval ); } break;
  1772. case 70:
  1773. /* # line 499 "gram.in" */
  1774. { yyval.extval = yypvt[-1].extval;  incomm(yypvt[-1].extval, yypvt[-0].namval); } break;
  1775. case 71:
  1776. /* # line 501 "gram.in" */
  1777. { yyval.extval = yypvt[-2].extval;  incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1778. case 72:
  1779. /* # line 503 "gram.in" */
  1780. { incomm(yypvt[-2].extval, yypvt[-0].namval); } break;
  1781. case 73:
  1782. /* # line 507 "gram.in" */
  1783. { yyval.extval = comblock(""); } break;
  1784. case 74:
  1785. /* # line 509 "gram.in" */
  1786. { yyval.extval = comblock(token); } break;
  1787. case 75:
  1788. /* # line 513 "gram.in" */
  1789. { setext(yypvt[-0].namval); } break;
  1790. case 76:
  1791. /* # line 515 "gram.in" */
  1792. { setext(yypvt[-0].namval); } break;
  1793. case 77:
  1794. /* # line 519 "gram.in" */
  1795. { NO66("INTRINSIC statement"); setintr(yypvt[-0].namval); } break;
  1796. case 78:
  1797. /* # line 521 "gram.in" */
  1798. { setintr(yypvt[-0].namval); } break;
  1799. case 81:
  1800. /* # line 529 "gram.in" */
  1801. {
  1802.         struct Equivblock *p;
  1803.         if(nequiv >= maxequiv)
  1804.             many("equivalences", 'q', maxequiv);
  1805.         p  =  & eqvclass[nequiv++];
  1806.         p->eqvinit = NO;
  1807.         p->eqvbottom = 0;
  1808.         p->eqvtop = 0;
  1809.         p->equivs = yypvt[-1].eqvval;
  1810.         } break;
  1811. case 82:
  1812. /* # line 542 "gram.in" */
  1813. { yyval.eqvval=ALLOC(Eqvchain);
  1814.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *)yypvt[-0].expval;
  1815.         } break;
  1816. case 83:
  1817. /* # line 546 "gram.in" */
  1818. { yyval.eqvval=ALLOC(Eqvchain);
  1819.           yyval.eqvval->eqvitem.eqvlhs = (struct Primblock *) yypvt[-0].expval;
  1820.           yyval.eqvval->eqvnextp = yypvt[-2].eqvval;
  1821.         } break;
  1822. case 86:
  1823. /* # line 557 "gram.in" */
  1824. { if(parstate == OUTSIDE)
  1825.             {
  1826.             newproc();
  1827.             startproc(ESNULL, CLMAIN);
  1828.             }
  1829.           if(parstate < INDATA)
  1830.             {
  1831.             enddcl();
  1832.             parstate = INDATA;
  1833.             datagripe = 1;
  1834.             }
  1835.         } break;
  1836. case 87:
  1837. /* # line 572 "gram.in" */
  1838. { ftnint junk;
  1839.           if(nextdata(&junk) != NULL)
  1840.             err("too few initializers");
  1841.           frdata(yypvt[-4].chval);
  1842.           frrpl();
  1843.         } break;
  1844. case 88:
  1845. /* # line 580 "gram.in" */
  1846. { frchain(&datastack); curdtp = 0; } break;
  1847. case 89:
  1848. /* # line 582 "gram.in" */
  1849. { pop_datastack(); } break;
  1850. case 90:
  1851. /* # line 584 "gram.in" */
  1852. { toomanyinit = NO; } break;
  1853. case 93:
  1854. /* # line 589 "gram.in" */
  1855. { dataval(ENULL, yypvt[-0].expval); } break;
  1856. case 94:
  1857. /* # line 591 "gram.in" */
  1858. { dataval(yypvt[-2].expval, yypvt[-0].expval); } break;
  1859. case 96:
  1860. /* # line 596 "gram.in" */
  1861. { if( yypvt[-1].ival==OPMINUS && ISCONST(yypvt[-0].expval) )
  1862.             consnegop((Constp)yypvt[-0].expval);
  1863.           yyval.expval = yypvt[-0].expval;
  1864.         } break;
  1865. case 100:
  1866. /* # line 608 "gram.in" */
  1867. { int k;
  1868.           yypvt[-0].namval->vsave = YES;
  1869.           k = yypvt[-0].namval->vstg;
  1870.         if( ! ONEOF(k, M(STGUNKNOWN)|M(STGBSS)|M(STGINIT)) )
  1871.             dclerr("can only save static variables", yypvt[-0].namval);
  1872.         } break;
  1873. case 104:
  1874. /* # line 622 "gram.in" */
  1875. { if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1876.             make_param((struct Paramblock *)yypvt[-2].namval, yypvt[-0].expval);
  1877.           else dclerr("cannot make into parameter", yypvt[-2].namval);
  1878.         } break;
  1879. case 105:
  1880. /* # line 629 "gram.in" */
  1881. { if(ndim>0) setbound(yypvt[-1].namval, ndim, dims); } break;
  1882. case 106:
  1883. /* # line 633 "gram.in" */
  1884. { Namep np;
  1885.           np = ( (struct Primblock *) yypvt[-0].expval) -> namep;
  1886.           vardcl(np);
  1887.           if(np->vstg == STGCOMMON)
  1888.             extsymtab[np->vardesc.varno].extinit = YES;
  1889.           else if(np->vstg==STGEQUIV)
  1890.             eqvclass[np->vardesc.varno].eqvinit = YES;
  1891.           else if(np->vstg!=STGINIT && np->vstg!=STGBSS)
  1892.             dclerr("inconsistent storage classes", np);
  1893.           yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL);
  1894.         } break;
  1895. case 107:
  1896. /* # line 645 "gram.in" */
  1897. { chainp p; struct Impldoblock *q;
  1898.         pop_datastack();
  1899.         q = ALLOC(Impldoblock);
  1900.         q->tag = TIMPLDO;
  1901.         (q->varnp = (Namep) (yypvt[-1].chval->datap))->vimpldovar = 1;
  1902.         p = yypvt[-1].chval->nextp;
  1903.         if(p)  { q->implb = (expptr)(p->datap); p = p->nextp; }
  1904.         if(p)  { q->impub = (expptr)(p->datap); p = p->nextp; }
  1905.         if(p)  { q->impstep = (expptr)(p->datap); }
  1906.         frchain( & (yypvt[-1].chval) );
  1907.         yyval.chval = mkchain((char *)q, CHNULL);
  1908.         q->datalist = hookup(yypvt[-3].chval, yyval.chval);
  1909.         } break;
  1910. case 108:
  1911. /* # line 661 "gram.in" */
  1912. { if (!datastack)
  1913.             curdtp = 0;
  1914.           datastack = mkchain((char *)curdtp, datastack);
  1915.           curdtp = yypvt[-0].chval; curdtelt = 0;
  1916.           } break;
  1917. case 109:
  1918. /* # line 667 "gram.in" */
  1919. { yyval.chval = hookup(yypvt[-2].chval, yypvt[-0].chval); } break;
  1920. case 110:
  1921. /* # line 671 "gram.in" */
  1922. { ndim = 0; } break;
  1923. case 112:
  1924. /* # line 675 "gram.in" */
  1925. { ndim = 0; } break;
  1926. case 115:
  1927. /* # line 680 "gram.in" */
  1928. {
  1929.           if(ndim == maxdim)
  1930.             err("too many dimensions");
  1931.           else if(ndim < maxdim)
  1932.             { dims[ndim].lb = 0;
  1933.               dims[ndim].ub = yypvt[-0].expval;
  1934.             }
  1935.           ++ndim;
  1936.         } break;
  1937. case 116:
  1938. /* # line 690 "gram.in" */
  1939. {
  1940.           if(ndim == maxdim)
  1941.             err("too many dimensions");
  1942.           else if(ndim < maxdim)
  1943.             { dims[ndim].lb = yypvt[-2].expval;
  1944.               dims[ndim].ub = yypvt[-0].expval;
  1945.             }
  1946.           ++ndim;
  1947.         } break;
  1948. case 117:
  1949. /* # line 702 "gram.in" */
  1950. { yyval.expval = 0; } break;
  1951. case 119:
  1952. /* # line 707 "gram.in" */
  1953. { nstars = 1; labarray[0] = yypvt[-0].labval; } break;
  1954. case 120:
  1955. /* # line 709 "gram.in" */
  1956. { if(nstars < MAXLABLIST)  labarray[nstars++] = yypvt[-0].labval; } break;
  1957. case 121:
  1958. /* # line 713 "gram.in" */
  1959. { yyval.labval = execlab( convci(toklen, token) ); } break;
  1960. case 122:
  1961. /* # line 717 "gram.in" */
  1962. { NO66("IMPLICIT statement"); } break;
  1963. case 125:
  1964. /* # line 723 "gram.in" */
  1965. { if (vartype != TYUNKNOWN)
  1966.             dclerr("-- expected letter range",NPNULL);
  1967.           setimpl(vartype, varleng, 'a', 'z'); } break;
  1968. case 126:
  1969. /* # line 728 "gram.in" */
  1970. { needkwd = 1; } break;
  1971. case 130:
  1972. /* # line 737 "gram.in" */
  1973. { setimpl(vartype, varleng, yypvt[-0].ival, yypvt[-0].ival); } break;
  1974. case 131:
  1975. /* # line 739 "gram.in" */
  1976. { setimpl(vartype, varleng, yypvt[-2].ival, yypvt[-0].ival); } break;
  1977. case 132:
  1978. /* # line 743 "gram.in" */
  1979. { if(toklen!=1 || token[0]<'a' || token[0]>'z')
  1980.             {
  1981.             dclerr("implicit item must be single letter", NPNULL);
  1982.             yyval.ival = 0;
  1983.             }
  1984.           else yyval.ival = token[0];
  1985.         } break;
  1986. case 135:
  1987. /* # line 757 "gram.in" */
  1988. {
  1989.         if(yypvt[-2].namval->vclass == CLUNKNOWN)
  1990.             {
  1991.             yypvt[-2].namval->vclass = CLNAMELIST;
  1992.             yypvt[-2].namval->vtype = TYINT;
  1993.             yypvt[-2].namval->vstg = STGBSS;
  1994.             yypvt[-2].namval->varxptr.namelist = yypvt[-0].chval;
  1995.             yypvt[-2].namval->vardesc.varno = ++lastvarno;
  1996.             }
  1997.         else dclerr("cannot be a namelist name", yypvt[-2].namval);
  1998.         } break;
  1999. case 136:
  2000. /* # line 771 "gram.in" */
  2001. { yyval.chval = mkchain((char *)yypvt[-0].namval, CHNULL); } break;
  2002. case 137:
  2003. /* # line 773 "gram.in" */
  2004. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].namval, CHNULL)); } break;
  2005. case 138:
  2006. /* # line 777 "gram.in" */
  2007. { switch(parstate)
  2008.             {
  2009.             case OUTSIDE:    newproc();
  2010.                     startproc(ESNULL, CLMAIN);
  2011.             case INSIDE:    parstate = INDCL;
  2012.             case INDCL:    break;
  2013.  
  2014.             case INDATA:
  2015.                 if (datagripe) {
  2016.                     errstr(
  2017.                 "Statement order error: declaration after DATA",
  2018.                         CNULL);
  2019.                     datagripe = 0;
  2020.                     }
  2021.                 break;
  2022.  
  2023.             default:
  2024.                 dclerr("declaration among executables", NPNULL);
  2025.             }
  2026.         } break;
  2027. case 139:
  2028. /* # line 799 "gram.in" */
  2029. { yyval.chval = 0; } break;
  2030. case 140:
  2031. /* # line 801 "gram.in" */
  2032. { yyval.chval = revchain(yypvt[-0].chval); } break;
  2033. case 141:
  2034. /* # line 805 "gram.in" */
  2035. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  2036. case 142:
  2037. /* # line 807 "gram.in" */
  2038. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  2039. case 144:
  2040. /* # line 812 "gram.in" */
  2041. { yyval.expval = yypvt[-1].expval; } break;
  2042. case 148:
  2043. /* # line 819 "gram.in" */
  2044. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  2045. case 149:
  2046. /* # line 821 "gram.in" */
  2047. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  2048. case 150:
  2049. /* # line 823 "gram.in" */
  2050. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  2051. case 151:
  2052. /* # line 825 "gram.in" */
  2053. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  2054. case 152:
  2055. /* # line 827 "gram.in" */
  2056. { if(yypvt[-1].ival == OPMINUS)
  2057.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  2058.           else     yyval.expval = yypvt[-0].expval;
  2059.         } break;
  2060. case 153:
  2061. /* # line 832 "gram.in" */
  2062. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  2063. case 154:
  2064. /* # line 834 "gram.in" */
  2065. { NO66(".EQV. operator");
  2066.           yyval.expval = mkexpr(OPEQV, yypvt[-2].expval,yypvt[-0].expval); } break;
  2067. case 155:
  2068. /* # line 837 "gram.in" */
  2069. { NO66(".NEQV. operator");
  2070.           yyval.expval = mkexpr(OPNEQV, yypvt[-2].expval, yypvt[-0].expval); } break;
  2071. case 156:
  2072. /* # line 840 "gram.in" */
  2073. { yyval.expval = mkexpr(OPOR, yypvt[-2].expval, yypvt[-0].expval); } break;
  2074. case 157:
  2075. /* # line 842 "gram.in" */
  2076. { yyval.expval = mkexpr(OPAND, yypvt[-2].expval, yypvt[-0].expval); } break;
  2077. case 158:
  2078. /* # line 844 "gram.in" */
  2079. { yyval.expval = mkexpr(OPNOT, yypvt[-0].expval, ENULL); } break;
  2080. case 159:
  2081. /* # line 846 "gram.in" */
  2082. { NO66("concatenation operator //");
  2083.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  2084. case 160:
  2085. /* # line 850 "gram.in" */
  2086. { yyval.ival = OPPLUS; } break;
  2087. case 161:
  2088. /* # line 851 "gram.in" */
  2089. { yyval.ival = OPMINUS; } break;
  2090. case 162:
  2091. /* # line 854 "gram.in" */
  2092. { yyval.ival = OPEQ; } break;
  2093. case 163:
  2094. /* # line 855 "gram.in" */
  2095. { yyval.ival = OPGT; } break;
  2096. case 164:
  2097. /* # line 856 "gram.in" */
  2098. { yyval.ival = OPLT; } break;
  2099. case 165:
  2100. /* # line 857 "gram.in" */
  2101. { yyval.ival = OPGE; } break;
  2102. case 166:
  2103. /* # line 858 "gram.in" */
  2104. { yyval.ival = OPLE; } break;
  2105. case 167:
  2106. /* # line 859 "gram.in" */
  2107. { yyval.ival = OPNE; } break;
  2108. case 168:
  2109. /* # line 863 "gram.in" */
  2110. { yyval.expval = mkprim(yypvt[-0].namval, LBNULL, CHNULL); } break;
  2111. case 169:
  2112. /* # line 865 "gram.in" */
  2113. { NO66("substring operator :");
  2114.           yyval.expval = mkprim(yypvt[-1].namval, LBNULL, yypvt[-0].chval); } break;
  2115. case 170:
  2116. /* # line 868 "gram.in" */
  2117. { yyval.expval = mkprim(yypvt[-3].namval, mklist(yypvt[-1].chval), CHNULL); } break;
  2118. case 171:
  2119. /* # line 870 "gram.in" */
  2120. { NO66("substring operator :");
  2121.           yyval.expval = mkprim(yypvt[-4].namval, mklist(yypvt[-2].chval), yypvt[-0].chval); } break;
  2122. case 172:
  2123. /* # line 875 "gram.in" */
  2124. { yyval.chval = mkchain((char *)yypvt[-3].expval, mkchain((char *)yypvt[-1].expval,CHNULL)); } break;
  2125. case 173:
  2126. /* # line 879 "gram.in" */
  2127. { yyval.expval = 0; } break;
  2128. case 175:
  2129. /* # line 884 "gram.in" */
  2130. { if(yypvt[-0].namval->vclass == CLPARAM)
  2131.             yyval.expval = (expptr) cpexpr(
  2132.                 ( (struct Paramblock *) (yypvt[-0].namval) ) -> paramval);
  2133.         } break;
  2134. case 177:
  2135. /* # line 891 "gram.in" */
  2136. { yyval.expval = mklogcon(1); } break;
  2137. case 178:
  2138. /* # line 892 "gram.in" */
  2139. { yyval.expval = mklogcon(0); } break;
  2140. case 179:
  2141. /* # line 893 "gram.in" */
  2142. { yyval.expval = mkstrcon(toklen, token); } break;
  2143. case 180:
  2144. /* # line 894 "gram.in" */
  2145.  { yyval.expval = mkintcon( convci(toklen, token) ); } break;
  2146. case 181:
  2147. /* # line 895 "gram.in" */
  2148.  { yyval.expval = mkrealcon(tyreal, token); } break;
  2149. case 182:
  2150. /* # line 896 "gram.in" */
  2151.  { yyval.expval = mkrealcon(TYDREAL, token); } break;
  2152. case 184:
  2153. /* # line 901 "gram.in" */
  2154. { yyval.expval = mkcxcon(yypvt[-3].expval,yypvt[-1].expval); } break;
  2155. case 185:
  2156. /* # line 905 "gram.in" */
  2157. { NOEXT("hex constant");
  2158.           yyval.expval = mkbitcon(4, toklen, token); } break;
  2159. case 186:
  2160. /* # line 908 "gram.in" */
  2161. { NOEXT("octal constant");
  2162.           yyval.expval = mkbitcon(3, toklen, token); } break;
  2163. case 187:
  2164. /* # line 911 "gram.in" */
  2165. { NOEXT("binary constant");
  2166.           yyval.expval = mkbitcon(1, toklen, token); } break;
  2167. case 189:
  2168. /* # line 917 "gram.in" */
  2169. { yyval.expval = yypvt[-1].expval; } break;
  2170. case 192:
  2171. /* # line 923 "gram.in" */
  2172. { yyval.expval = mkexpr(yypvt[-1].ival, yypvt[-2].expval, yypvt[-0].expval); } break;
  2173. case 193:
  2174. /* # line 925 "gram.in" */
  2175. { yyval.expval = mkexpr(OPSTAR, yypvt[-2].expval, yypvt[-0].expval); } break;
  2176. case 194:
  2177. /* # line 927 "gram.in" */
  2178. { yyval.expval = mkexpr(OPSLASH, yypvt[-2].expval, yypvt[-0].expval); } break;
  2179. case 195:
  2180. /* # line 929 "gram.in" */
  2181. { yyval.expval = mkexpr(OPPOWER, yypvt[-2].expval, yypvt[-0].expval); } break;
  2182. case 196:
  2183. /* # line 931 "gram.in" */
  2184. { if(yypvt[-1].ival == OPMINUS)
  2185.             yyval.expval = mkexpr(OPNEG, yypvt[-0].expval, ENULL);
  2186.           else    yyval.expval = yypvt[-0].expval;
  2187.         } break;
  2188. case 197:
  2189. /* # line 936 "gram.in" */
  2190. { NO66("concatenation operator //");
  2191.           yyval.expval = mkexpr(OPCONCAT, yypvt[-2].expval, yypvt[-0].expval); } break;
  2192. case 199:
  2193. /* # line 941 "gram.in" */
  2194. {
  2195.         if(yypvt[-3].labval->labdefined)
  2196.             execerr("no backward DO loops", CNULL);
  2197.         yypvt[-3].labval->blklevel = blklevel+1;
  2198.         exdo(yypvt[-3].labval->labelno, NPNULL, yypvt[-0].chval);
  2199.         } break;
  2200. case 200:
  2201. /* # line 948 "gram.in" */
  2202. {
  2203.         exdo((int)(ctls - ctlstack - 2), NPNULL, yypvt[-0].chval);
  2204.         NOEXT("DO without label");
  2205.         } break;
  2206. case 201:
  2207. /* # line 953 "gram.in" */
  2208. { exenddo(NPNULL); } break;
  2209. case 202:
  2210. /* # line 955 "gram.in" */
  2211. { exendif();  thiswasbranch = NO; } break;
  2212. case 204:
  2213. /* # line 958 "gram.in" */
  2214. { exelif(yypvt[-2].expval); lastwasbranch = NO; } break;
  2215. case 205:
  2216. /* # line 960 "gram.in" */
  2217. { exelse(); lastwasbranch = NO; } break;
  2218. case 206:
  2219. /* # line 962 "gram.in" */
  2220. { exendif(); lastwasbranch = NO; } break;
  2221. case 207:
  2222. /* # line 966 "gram.in" */
  2223. { exif(yypvt[-1].expval); } break;
  2224. case 208:
  2225. /* # line 970 "gram.in" */
  2226. { yyval.chval = mkchain((char *)yypvt[-2].namval, yypvt[-0].chval); } break;
  2227. case 210:
  2228. /* # line 975 "gram.in" */
  2229. { yyval.chval = mkchain(CNULL, (chainp)yypvt[-1].expval); } break;
  2230. case 211:
  2231. /* # line 979 "gram.in" */
  2232. { exequals((struct Primblock *)yypvt[-2].expval, yypvt[-0].expval); } break;
  2233. case 212:
  2234. /* # line 981 "gram.in" */
  2235. { exassign(yypvt[-0].namval, yypvt[-2].labval); } break;
  2236. case 215:
  2237. /* # line 985 "gram.in" */
  2238. { inioctl = NO; } break;
  2239. case 216:
  2240. /* # line 987 "gram.in" */
  2241. { exarif(yypvt[-6].expval, yypvt[-4].labval, yypvt[-2].labval, yypvt[-0].labval);  thiswasbranch = YES; } break;
  2242. case 217:
  2243. /* # line 989 "gram.in" */
  2244. { excall(yypvt[-0].namval, LBNULL, 0, labarray); } break;
  2245. case 218:
  2246. /* # line 991 "gram.in" */
  2247. { excall(yypvt[-2].namval, LBNULL, 0, labarray); } break;
  2248. case 219:
  2249. /* # line 993 "gram.in" */
  2250. { if(nstars < MAXLABLIST)
  2251.             excall(yypvt[-3].namval, mklist(revchain(yypvt[-1].chval)), nstars, labarray);
  2252.           else
  2253.             err("too many alternate returns");
  2254.         } break;
  2255. case 220:
  2256. /* # line 999 "gram.in" */
  2257. { exreturn(yypvt[-0].expval);  thiswasbranch = YES; } break;
  2258. case 221:
  2259. /* # line 1001 "gram.in" */
  2260. { exstop(yypvt[-2].ival, yypvt[-0].expval);  thiswasbranch = yypvt[-2].ival; } break;
  2261. case 222:
  2262. /* # line 1005 "gram.in" */
  2263. { yyval.labval = mklabel( convci(toklen, token) ); } break;
  2264. case 223:
  2265. /* # line 1009 "gram.in" */
  2266. { if(parstate == OUTSIDE)
  2267.             {
  2268.             newproc();
  2269.             startproc(ESNULL, CLMAIN);
  2270.             }
  2271.         } break;
  2272. case 224:
  2273. /* # line 1018 "gram.in" */
  2274. { exgoto(yypvt[-0].labval);  thiswasbranch = YES; } break;
  2275. case 225:
  2276. /* # line 1020 "gram.in" */
  2277. { exasgoto(yypvt[-0].namval);  thiswasbranch = YES; } break;
  2278. case 226:
  2279. /* # line 1022 "gram.in" */
  2280. { exasgoto(yypvt[-4].namval);  thiswasbranch = YES; } break;
  2281. case 227:
  2282. /* # line 1024 "gram.in" */
  2283. { if(nstars < MAXLABLIST)
  2284.             putcmgo(putx(fixtype(yypvt[-0].expval)), nstars, labarray);
  2285.           else
  2286.             err("computed GOTO list too long");
  2287.         } break;
  2288. case 230:
  2289. /* # line 1036 "gram.in" */
  2290. { nstars = 0; yyval.namval = yypvt[-0].namval; } break;
  2291. case 231:
  2292. /* # line 1040 "gram.in" */
  2293. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval,CHNULL) : CHNULL; } break;
  2294. case 232:
  2295. /* # line 1042 "gram.in" */
  2296. { yyval.chval = yypvt[-0].expval ? mkchain((char *)yypvt[-0].expval, yypvt[-2].chval) : yypvt[-2].chval; } break;
  2297. case 234:
  2298. /* # line 1047 "gram.in" */
  2299. { if(nstars<MAXLABLIST) labarray[nstars++] = yypvt[-0].labval; yyval.expval = 0; } break;
  2300. case 235:
  2301. /* # line 1051 "gram.in" */
  2302. { yyval.ival = 0; } break;
  2303. case 236:
  2304. /* # line 1053 "gram.in" */
  2305. { yyval.ival = 2; } break;
  2306. case 237:
  2307. /* # line 1057 "gram.in" */
  2308. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  2309. case 238:
  2310. /* # line 1059 "gram.in" */
  2311. { yyval.chval = hookup(yypvt[-2].chval, mkchain((char *)yypvt[-0].expval,CHNULL) ); } break;
  2312. case 239:
  2313. /* # line 1063 "gram.in" */
  2314. { if(parstate == OUTSIDE)
  2315.             {
  2316.             newproc();
  2317.             startproc(ESNULL, CLMAIN);
  2318.             }
  2319.  
  2320. /* This next statement depends on the ordering of the state table encoding */
  2321.  
  2322.           if(parstate < INDATA) enddcl();
  2323.         } break;
  2324. case 240:
  2325. /* # line 1076 "gram.in" */
  2326. { intonly = YES; } break;
  2327. case 241:
  2328. /* # line 1080 "gram.in" */
  2329. { intonly = NO; } break;
  2330. case 242:
  2331. /* # line 1085 "gram.in" */
  2332. { endio(); } break;
  2333. case 244:
  2334. /* # line 1090 "gram.in" */
  2335. { ioclause(IOSUNIT, yypvt[-0].expval); endioctl(); } break;
  2336. case 245:
  2337. /* # line 1092 "gram.in" */
  2338. { ioclause(IOSUNIT, ENULL); endioctl(); } break;
  2339. case 246:
  2340. /* # line 1094 "gram.in" */
  2341. { ioclause(IOSUNIT, IOSTDERR); endioctl(); } break;
  2342. case 248:
  2343. /* # line 1097 "gram.in" */
  2344. { doio(CHNULL); } break;
  2345. case 249:
  2346. /* # line 1099 "gram.in" */
  2347. { doio(CHNULL); } break;
  2348. case 250:
  2349. /* # line 1101 "gram.in" */
  2350. { doio(revchain(yypvt[-0].chval)); } break;
  2351. case 251:
  2352. /* # line 1103 "gram.in" */
  2353. { doio(revchain(yypvt[-0].chval)); } break;
  2354. case 252:
  2355. /* # line 1105 "gram.in" */
  2356. { doio(revchain(yypvt[-0].chval)); } break;
  2357. case 253:
  2358. /* # line 1107 "gram.in" */
  2359. { doio(CHNULL); } break;
  2360. case 254:
  2361. /* # line 1109 "gram.in" */
  2362. { doio(revchain(yypvt[-0].chval)); } break;
  2363. case 255:
  2364. /* # line 1111 "gram.in" */
  2365. { doio(CHNULL); } break;
  2366. case 256:
  2367. /* # line 1113 "gram.in" */
  2368. { doio(revchain(yypvt[-0].chval)); } break;
  2369. case 258:
  2370. /* # line 1120 "gram.in" */
  2371. { iostmt = IOBACKSPACE; } break;
  2372. case 259:
  2373. /* # line 1122 "gram.in" */
  2374. { iostmt = IOREWIND; } break;
  2375. case 260:
  2376. /* # line 1124 "gram.in" */
  2377. { iostmt = IOENDFILE; } break;
  2378. case 262:
  2379. /* # line 1131 "gram.in" */
  2380. { iostmt = IOINQUIRE; } break;
  2381. case 263:
  2382. /* # line 1133 "gram.in" */
  2383. { iostmt = IOOPEN; } break;
  2384. case 264:
  2385. /* # line 1135 "gram.in" */
  2386. { iostmt = IOCLOSE; } break;
  2387. case 265:
  2388. /* # line 1139 "gram.in" */
  2389. {
  2390.         ioclause(IOSUNIT, ENULL);
  2391.         ioclause(IOSFMT, yypvt[-0].expval);
  2392.         endioctl();
  2393.         } break;
  2394. case 266:
  2395. /* # line 1145 "gram.in" */
  2396. {
  2397.         ioclause(IOSUNIT, ENULL);
  2398.         ioclause(IOSFMT, ENULL);
  2399.         endioctl();
  2400.         } break;
  2401. case 267:
  2402. /* # line 1153 "gram.in" */
  2403. {
  2404.           ioclause(IOSUNIT, yypvt[-1].expval);
  2405.           endioctl();
  2406.         } break;
  2407. case 268:
  2408. /* # line 1158 "gram.in" */
  2409. { endioctl(); } break;
  2410. case 271:
  2411. /* # line 1166 "gram.in" */
  2412. { ioclause(IOSPOSITIONAL, yypvt[-0].expval); } break;
  2413. case 272:
  2414. /* # line 1168 "gram.in" */
  2415. { ioclause(IOSPOSITIONAL, ENULL); } break;
  2416. case 273:
  2417. /* # line 1170 "gram.in" */
  2418. { ioclause(IOSPOSITIONAL, IOSTDERR); } break;
  2419. case 274:
  2420. /* # line 1172 "gram.in" */
  2421. { ioclause(yypvt[-1].ival, yypvt[-0].expval); } break;
  2422. case 275:
  2423. /* # line 1174 "gram.in" */
  2424. { ioclause(yypvt[-1].ival, ENULL); } break;
  2425. case 276:
  2426. /* # line 1176 "gram.in" */
  2427. { ioclause(yypvt[-1].ival, IOSTDERR); } break;
  2428. case 277:
  2429. /* # line 1180 "gram.in" */
  2430. { yyval.ival = iocname(); } break;
  2431. case 278:
  2432. /* # line 1184 "gram.in" */
  2433. { iostmt = IOREAD; } break;
  2434. case 279:
  2435. /* # line 1188 "gram.in" */
  2436. { iostmt = IOWRITE; } break;
  2437. case 280:
  2438. /* # line 1192 "gram.in" */
  2439. {
  2440.         iostmt = IOWRITE;
  2441.         ioclause(IOSUNIT, ENULL);
  2442.         ioclause(IOSFMT, yypvt[-1].expval);
  2443.         endioctl();
  2444.         } break;
  2445. case 281:
  2446. /* # line 1199 "gram.in" */
  2447. {
  2448.         iostmt = IOWRITE;
  2449.         ioclause(IOSUNIT, ENULL);
  2450.         ioclause(IOSFMT, ENULL);
  2451.         endioctl();
  2452.         } break;
  2453. case 282:
  2454. /* # line 1208 "gram.in" */
  2455. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  2456. case 283:
  2457. /* # line 1210 "gram.in" */
  2458. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  2459. case 284:
  2460. /* # line 1214 "gram.in" */
  2461. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  2462. case 285:
  2463. /* # line 1216 "gram.in" */
  2464. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval,revchain(yypvt[-3].chval)); } break;
  2465. case 286:
  2466. /* # line 1220 "gram.in" */
  2467. { yyval.chval = mkchain((char *)yypvt[-0].expval, CHNULL); } break;
  2468. case 287:
  2469. /* # line 1222 "gram.in" */
  2470. { yyval.chval = mkchain((char *)yypvt[-0].tagval, CHNULL); } break;
  2471. case 289:
  2472. /* # line 1227 "gram.in" */
  2473. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  2474. case 290:
  2475. /* # line 1229 "gram.in" */
  2476. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].expval, CHNULL) ); } break;
  2477. case 291:
  2478. /* # line 1231 "gram.in" */
  2479. { yyval.chval = mkchain((char *)yypvt[-0].expval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  2480. case 292:
  2481. /* # line 1233 "gram.in" */
  2482. { yyval.chval = mkchain((char *)yypvt[-0].tagval, mkchain((char *)yypvt[-2].tagval, CHNULL) ); } break;
  2483. case 293:
  2484. /* # line 1235 "gram.in" */
  2485. { yyval.chval = mkchain((char *)yypvt[-0].expval, yypvt[-2].chval); } break;
  2486. case 294:
  2487. /* # line 1237 "gram.in" */
  2488. { yyval.chval = mkchain((char *)yypvt[-0].tagval, yypvt[-2].chval); } break;
  2489. case 295:
  2490. /* # line 1241 "gram.in" */
  2491. { yyval.tagval = (tagptr) yypvt[-0].expval; } break;
  2492. case 296:
  2493. /* # line 1243 "gram.in" */
  2494. { yyval.tagval = (tagptr) yypvt[-1].expval; } break;
  2495. case 297:
  2496. /* # line 1245 "gram.in" */
  2497. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].expval, CHNULL) ); } break;
  2498. case 298:
  2499. /* # line 1247 "gram.in" */
  2500. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, mkchain((char *)yypvt[-3].tagval, CHNULL) ); } break;
  2501. case 299:
  2502. /* # line 1249 "gram.in" */
  2503. { yyval.tagval = (tagptr) mkiodo(yypvt[-1].chval, revchain(yypvt[-3].chval)); } break;
  2504. case 300:
  2505. /* # line 1253 "gram.in" */
  2506. { startioctl(); } break;
  2507.     }
  2508.     goto yystack;        /* reset registers in driver code */
  2509. }
  2510.